我正在使用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等功能,但没有任何工作。
非常感谢任何协助。
更新
我已经执行了
select dump(title, 1016), dump(title1, 1016)
into v_title, v_title1
from dual
其中title是作为varchar传入的字符串,title1是作为NVarchar传入的字符串。
毫无疑问,编码是WE8ISO8859P1和AL16UTF16。但是两者都以ε'BF'形式出现。这是颠倒的问号。
我唯一的想法是尝试将其作为原始传递,然后用它做点什么。但是我还没有弄清楚如何使用XQuery(OSB)将字符串转换为可接受的格式。
继续感谢您的帮助。
答案 0 :(得分:1)
我们的DBA找到了解决此问题的方法。答案在于总线上的dbc连接设置,告诉它将utf8转换为NChar。
在“连接池”页面上,将以下行添加到“属性”框中。
oracle.jdbc.convertNcharLiterals =真 oracle.jdbc.defaultNchar =真
这将允许您在保持utf8字符的同时插入NVarchar2字段。
干杯
答案 1 :(得分:0)
我用'(ε-c'进行了测试。我没有遇到任何问题。
如果您能建议您更改字符集:
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
Oracle对所有新部署的建议是Unicode字符集AL32UTF8。
因为它是灵活的全球化支持,是一种通用的字符集
REG,
答案 2 :(得分:0)
首先验证数据是否正确存储,然后使用正确的NLS_LANG设置。看看我对这个问题的回答:
when insert persian character in oracle db i see the question mark