Clob大小(以字节为单位)

时间:2014-09-25 13:45:03

标签: oracle

我有一个包含以下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来告知第二个范围创建。

1 个答案:

答案 0 :(得分:6)

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

它说:

  

CLOB列中的数据以与之兼容的格式存储   UCS-2,当数据库字符集是多字节时,如UTF8或   AL32UTF8。这意味着英语所需的存储空间   转换数据时文档翻倍

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