Java 代码中的泰语字符不允许超过 1333 个字符。除了在 db 中使用 CLOB 数据类型外,还有其他可能的方法吗?我们正在使用 Oracle 11g。
问问题
715 次
2 回答
1
简单地说,不(我假设您使用 VARCHAR2 数据类型。),除了带有EXTENDED
字符串的 Oracle 12c。
VARCHAR2
列在正常模式下允许 4000个字节,在扩展模式下最多允许 32767 个字节。
泰语需要多字节字符,这就是为什么超过 1333 个字符可能占用超过 4000 个字节的原因。
NVARCHAR2
列在正常模式下允许 2000 个字符,在扩展模式下最多允许 16383 个字符。
于 2015-12-30T11:48:33.350 回答
0
什么是 db 字符集?
我怀疑您的情况如下:
- al32utf8 是 db 字符集。
- 表中的 varchar2 列具有字节语义。
utf8 编码以最多 3 个字节表示每个泰语。因此您会遇到 1333 而不是 4000 的长度限制。
ALTER TABLE MODIFY <column> VARCHAR2(n CHAR);
您可以使用(ref.: see here )将长度语义从 byte 更改为 char 。
为了完整起见:如果您使用单字节 db 字符集(如WE8ISO8859P11
(iso 8859-11,泰语脚本)),字符可以由基本字符和变音符号组成。在这种情况下,您可能会成功更改数据源中的编码以将代码点用于复合字符。但是,我认为这种情况不太可能发生,因为实际上您的每个测试数据字符都必须由三个部分组成以匹配观察结果。
于 2015-12-30T13:10:24.027 回答