1

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

4

1 回答 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 回答