首页 文章

插入时丢失特殊字符

提问于
浏览
2

我正在使用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 回答

  • 0

    我们的DBA找到了解决此问题的方法 . 答案在于总线上的dbc连接设置,告诉它将utf8转换为NChar .

    在“连接池”页面上,将以下行添加到“属性”框中 .

    oracle.jdbc.convertNcharLiterals = true oracle.jdbc.defaultNchar = true

    这将允许您在保持utf8字符的同时插入NVarchar2字段 .

    干杯

  • 1

    我用'(ε-c')进行了测试 . 我没有遇到任何问题 .

    如果你能建议你改变你的字符集:

    NLS_CHARACTERSET            AL32UTF8
    NLS_NCHAR_CHARACTERSET      AL16UTF16
    

    并且Oracle对所有新部署的建议是Unicode字符集AL32UTF8 .

    因为它是灵活的全球化支持,是一种通用的字符集

    REG,

  • 0

    首先验证数据是否正确存储,然后使用正确的NLS_LANG设置 . 看看我对这个问题的回答:

    when insert persian character in oracle db i see the question mark

相关问题