具有特殊字符的Oracle SQL加载表列

时间:2009-11-25 13:24:02

标签: sql string oracle character cjk

我正在加载数据并将数据插入Oracle数据库。当我遇到看起来像中文字符的特殊字符时,我收到一个错误,比如拒绝行,因为超出了最大列数。对于具有相同列的相同长度的英文字符的行,我没有收到此错误。我正在使用SUBSTR和TRIM功能,但它无法正常工作。如何确定中文字符串的长度是否超过列大小?

1 个答案:

答案 0 :(得分: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个字节)。