暂无图片
Oracle 把图片用二进制的方式blob 存储后,所占空间与图片大小一致吗?
我来答
分享
暂无图片 匿名用户
Oracle 把图片用二进制的方式blob 存储后,所占空间与图片大小一致吗?

如一个2m的图片存到某个表里,这个表的空间会占到2m吗?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
薛晓刚

可能会大一点。

暂无图片 评论
暂无图片 有用 0
打赏 0
DarkAthena
  1. 用这个表名去查大小,你会发现这个表的大小没有变,下面我模拟了存入一个BLOB对象并让它变大
    image.png

https://dbfiddle.uk/?rdbms=oracle_21&fiddle=948ce4fca7881bf70b8dc08f91e02928

  1. BLOB/CLOB的数据其实是存储在另外的segment里的,原表里其实只存了一个位置,指明这个值是存到哪去了。
  2. 另外,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
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~