加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长百科 > 正文

oracle – 以字节为单位的Clob大小

发布时间:2021-01-27 05:08:11 所属栏目:站长百科 来源:网络整理
导读:我有一个具有以下NLS设置的数据库 NLS_NCHAR_CHARACTERSET - AL16UTF16NLS_CHARACTERSET - AL32UTF8 有一个表,其中包含存储base64编码数据的clob列. 由于字符主要是英文和字母,我假设每个字符仅占用1个字节作为clob,使用NLS_CHARACTERSET的字符集进行编码.

我有一个具有以下NLS设置的数据库

NLS_NCHAR_CHARACTERSET  - AL16UTF16

NLS_CHARACTERSET - AL32UTF8

有一个表,其中包含存储base64编码数据的clob列.
由于字符主要是英文和字母,我假设每个字符仅占用1个字节作为clob,使用NLS_CHARACTERSET的字符集进行编码.

使用内联启用的clob列,clob将以内联方式存储,除非它的大小超过4096字节.但是,当我尝试使用2048个字符存储一组数据时,我发现它没有内联存储(通过检查表DBA_TABLES).那么它是否意味着每个字符只使用1个字节?任何人都可以详细说明这个吗?

另一项测试补充:
使用块大小为8kb的clob列创建一个表,使初始段大小为65536字节.
在clob列中插入一行包含32,768个字符.可以通过查询dba_segments来告知第二个范围创建.

解决方法

http://docs.oracle.com/cd/E11882_01/server.112/e10729/ch6unicode.htm#r2c1-t12

它说:

Data in CLOB columns is stored in a format that is compatible with
UCS-2 when the database character set is multibyte,such as UTF8 or
AL32UTF8. This means that the storage space required for an English
document doubles when the data is converted

因此看起来CLOB在内部将所有内容存储为UCS-2(Unicode),即每个符号固定2个字节.因此,它存储内联4096/2 = 2048个字符.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读