匿名用户Oracle 把图片用二进制的方式blob 存储后,所占空间与图片大小一致吗?
如一个2m的图片存到某个表里,这个表的空间会占到2m吗?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
2条回答
默认
最新
采纳答案后不可修改和取消
- 用这个表名去查大小,你会发现这个表的大小没有变,下面我模拟了存入一个BLOB对象并让它变大

https://dbfiddle.uk/?rdbms=oracle_21&fiddle=948ce4fca7881bf70b8dc08f91e02928
- BLOB/CLOB的数据其实是存储在另外的segment里的,原表里其实只存了一个位置,指明这个值是存到哪去了。
- 另外,oracle数据库并不是存多少占多少,因为它是按段按块来的。
测试sql:
create table test_blob_0531 (a blob);
select BYTES from USER_segments where segment_name='TEST_BLOB_0531';
insert into test_blob_0531 values (empty_blob());
select BYTES from USER_segments where segment_name='TEST_BLOB_0531';
declare
a_blob blob;
tmp varchar2(50):='3131313131313131313131313131';
begin
select a into a_blob from test_blob_0531 for update;
dbms_lob.open(a_blob, dbms_lob.lob_readwrite);
dbms_lob.writeappend( a_blob,length(to_blob(tmp)), to_blob(tmp));
dbms_lob.close(a_blob);
commit;
end;
/
select BYTES from USER_segments where segment_name='TEST_BLOB_0531';
select length(a) from TEST_BLOB_0531;
declare
a_blob blob;
tmp varchar2(50):='3131313131313131313131313131';
I NUMBER:=0;
begin
select a into a_blob from test_blob_0531 for update;
dbms_lob.open(a_blob, dbms_lob.lob_readwrite);
LOOP
dbms_lob.writeappend( a_blob,length(to_blob(tmp)), to_blob(tmp));
I:=I+1;
IF I=10000 THEN EXIT;
END IF;
END LOOP;
dbms_lob.close(a_blob);
commit;
end;
/
select BYTES from USER_segments where segment_name='TEST_BLOB_0531';
select length(a) from TEST_BLOB_0531;
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

