我有一个具有以下NLS设置的数据库
NLS_NCHAR_CHARACTERSET - AL16UTF16
NLS_CHARACTERSET - AL32UTF8有一个表,其中有一个clob列,存储base64编码的数据。因为这些字符大多是英文和字母,所以我假设每个字符只占1字节,使用NLS_CHARACTERSET的字符集进行编码。
有了内联启用的clob列,clob将被内联存储,除非它的大小超过4096字节。但是,当我试图用2048个字符存储一组数据时,我发现它不是内联存储的(通过检查表DBA_TABLES)。那么,这是否意味着每个字符不使用1字节?有人能详细解释一下吗?
另一个测试添加了:创建一个具有块大小为8kb的clob列的表,以便初始段大小为65536字节。在clob列中插入一行,其中包含32,768个字符。第二个范围的创建可以通过查询dba_segments来实现。
发布于 2014-09-30 14:17:55
01/server.112/e10729/ch6unicode.htm#r2c1-t12
上面写着:
当数据库字符集是多字节的(如UTF8或AL32UTF8 )时,CLOB列中的数据以与UCS-2兼容的格式存储。这意味着在转换数据时,英语文档所需的存储空间会加倍。
因此,它看起来像CLOB在内部存储一切为UCS-2 (Unicode),即每个符号固定的两个字节。因此,它存储内联4096/2 = 2048个字符。
https://stackoverflow.com/questions/26040213
复制相似问题