我正在加载并将数据插入Oracle数据库。当我遇到看起来像中文字符的特殊字符时,由于列的最大尺寸被超过,我得到一个错误,如行被拒绝。对于英文字符在同一列显示长度相同的行,我没有收到此错误。我正在使用SUBSTR和TRIM功能,但它不起作用。如何判断中文字符串的长度是否超过列大小?具有特殊字符的Oracle SQL加载表列
回答
,如果你的列被定义为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个字节)。
您可能希望建议将架构定义从“VARCHAR2(XX)”更改为“VARCHAR2(XX CHAR)”,以使列长度为字符而不是字节。 – 2009-11-25 14:01:31
感谢亚当,我更新了我的答案 – 2009-11-25 14:41:48
之后,我使用VARCHAR2(XX CHAR)更改列架构定义,行拒绝的问题得到了消除,但我不得不将此值从分段加载到主表,我无法更改模式定义,所以,我做了一个substr,将其限制为不超过列大小,但现在我在执行SELECT * FROM TABLE,ORA-29275:部分多字节字符时收到新错误。 – Walker 2009-12-02 05:28:53
- 1. 具有特殊字符的提取子字符串 - Oracle
- 2. 口音Oracle - 特殊字符
- 3. 特殊字符jquery加载
- 4. oracle sql - 查询特殊字符
- 5. 具有特殊字符的PHP PDO
- 6. SQL LIKE有特殊字符
- 7. 特殊PHP字符列表
- 8. 具有特殊字符的原型$和$$
- 9. Oracle utl_match特殊字符
- 10. 选择具有特殊字符的列表元素
- 11. 列名有特殊字符
- 12. 有特殊字符
- 13. 识别SQL列中的特殊字符
- 14. 具有特殊字符的JSON.parse
- 15. 具有特殊字符的json,如é
- 16. 具有特殊字符的MVC路线
- 17. 具有特殊字符的Ajax响应
- 18. 具有特殊字符的网址#
- 19. 具有特殊(丹麦语)字符的Oracle表列名称。无法执行sql查询
- 20. SQL查询的特殊字符只有
- 21. 具有特殊字符和前导零的varchar中的SQL JOIN
- 22. 查询与具有特殊字符
- 23. .htaccess中具有特殊字符
- 24. 查找具有特殊字符
- 25. 访问场与具有特殊字符
- 26. 使用PyYaml加载特殊字符
- 27. 具有特定字符的html列表?
- 28. 具有特殊字符的SQL查询 - 如何处理?
- 29. 有特殊字符
- 30. 有特殊字符
你配置了NSLANG吗? – JuanZe 2009-11-25 13:27:40