插入时丢失特殊字符

时间:2014-07-26 12:25:49

标签: sql oracle xpath utf-8 osb

我正在使用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)将字符串转换为可接受的格式。

继续感谢您的帮助。

3 个答案:

答案 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