我正在将数据加载并插入到 Oracle 数据库中。当我遇到看起来像汉字的特殊字符时,我会收到一个错误,比如 row denied 因为超过了列的最大大小。对于具有相同列的相同长度的英文字符的行,我没有收到此错误。我正在使用 SUBSTR 和 TRIM 功能,但它不起作用。如何确定中文字符串的长度是否超过列大小?
3104 次
1 回答
3
如果您的列定义为VARCHAR2(XX)
[例如VARCHAR2(20)
],如果您尝试插入长度超过 XX个字节的字符串,您将收到错误消息。
该函数以字符数而不是字节SUBSTR
数计算长度。要以字节为单位选择子字符串,请使用函数。SUBSTRB
SQL> select substr('ЙЖ', 1, 2) from dual;
SUBSTR('ЙЖ',1,2)
------------------
ЙЖ
SQL> select substrb('ЙЖ', 1, 2) from dual;
SUBSTRB('ЙЖ',1,2)
-------------------
Й
编辑:根据Adam的建议,如果将列和变量定义为VARCHAR2 (XX CHAR)
. 在这种情况下,您的列将能够在所有字符集中存储 XX 个字符(如果将其存储在表中,则最多为 4000 个字节)。
于 2009-11-25T13:36:43.647 回答