我们有两个Oracle数据库。我们通过dblink从database2中的database1中读取数据。在database1中,我们有NLS_CHARACTERSET = AL32UTF8
and在database2中NLS_CHARACTERSET = EE8ISO8859P2
。
问题是读取database2中的数据是错误的。一些特殊字符是错误的。例如:
数据库1中的数据:个人企业
数据库2中的数据:?NTREPRINDERE INDIVIDUAL?
有人可以解释为什么(字节表示)以及什么解决方案(不仅仅是修改nls_characterset的解决方案)?
我在评论中建议的类型转换似乎对我有用。
演示版
我有一个AL32UTF8
远程数据库和一个EE8MSWIN1250
本地数据库,所以我必须使用不同于罗马尼亚语的字符,因为cp1250代码页中存在这些字符。然后去一些俄罗斯。
在远程数据库...
create table test_the_charset (xxx varchar2(256 char));
insert into test_the_charset (xxx)
values (n'ÎNTREPRINDERE INDIVIDUALĂ');
insert into test_the_charset (xxx)
values (n'Сегодня замечательный день, чтобы помочь людям на StackOverflow.com.');
commit;
在本地数据库...
SQL> select xxx from test_the_charset@my_remote_db;
XXX
--------------------------------------------------------------------------------
ÎNTREPRINDERE INDIVIDUALĂ
??????? ????????????? ????, ????? ?????? ????? ?? StackOverflow.com.
SQL> select cast(xxx as nvarchar2(2000)) from test_the_charset@my_remote_db;
CAST(XXXASNVARCHAR2(2000))
--------------------------------------------------------------------------------
ÎNTREPRINDERE INDIVIDUALĂ
Сегодня замечательный день, чтобы помочь людям на StackOverflow.com.
SQL>
至于“为什么会这样” ...
我不知道。根据定义,ISO8859-2应该允许存储罗马尼亚字符,因此应该通过DB链接进行传输而不会出现问题。但是,就您而言,他们没有。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句