我正在使用oracle 11g并试图插入一个包含特殊UTF8字符的字符串,例如'(ε-c' . 数据库的NLS字符集是......
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8ISO8859P1
当我将上面的字符串复制并粘贴到 NVARCHAR
字段时,它可以正常工作 .
如果我执行下面的内容,我会在字段中得到一个颠倒的问号
insert into title_debug values ('(ε- c');
其中title调试表由一个名为title的 NVARCHAR2(100)
字段组成 .
我试图将此字符串分配给 NVARCHAR2(100)
变量,然后将此字符串 . 并且还尝试了我能找到的所有不同的CAST / CONVERT等功能,但没有任何工作 .
任何帮助将不胜感激 .
UPDATE
我已经执行了
select dump(title, 1016), dump(title1, 1016)
into v_title, v_title1
from dual
其中title是作为varchar传入的字符串,title1是作为NVarchar传入的字符串 .
不可思议的编码是WE8ISO8859P1和AL16UTF16 . 但是两者都以ε'BF'形式出现 . 这是颠倒的问号 .
我唯一的想法是尝试将其作为原始传递,然后用它做一些事情 . 但是我还没有弄清楚如何使用XQuery(OSB)将字符串转换为可接受的格式 .
继续感谢您的帮助 .
3 回答
我们的DBA找到了解决此问题的方法 . 答案在于总线上的dbc连接设置,告诉它将utf8转换为NChar .
在“连接池”页面上,将以下行添加到“属性”框中 .
oracle.jdbc.convertNcharLiterals = true oracle.jdbc.defaultNchar = true
这将允许您在保持utf8字符的同时插入NVarchar2字段 .
干杯
我用'(ε-c')进行了测试 . 我没有遇到任何问题 .
如果你能建议你改变你的字符集:
并且Oracle对所有新部署的建议是Unicode字符集AL32UTF8 .
因为它是灵活的全球化支持,是一种通用的字符集
REG,
首先验证数据是否正确存储,然后使用正确的NLS_LANG设置 . 看看我对这个问题的回答:
when insert persian character in oracle db i see the question mark