Oracle数据库编码问题

拉扎列斯库

我们有两个Oracle数据库。我们通过dblink从database2中的database1中读取数据。在database1中,我们有NLS_CHARACTERSET = AL32UTF8and在database2中NLS_CHARACTERSET = EE8ISO8859P2

问题是读取database2中的数据是错误的。一些特殊字符是错误的。例如:

数据库1中的数据:个人企业

数据库2中的数据:?NTREPRINDERE INDIVIDUAL?

有人可以解释为什么(字节表示)以及什么解决方案(不仅仅是修改nls_characterset的解决方案)?

nop77svk

我在评论中建议的类型转换似乎对我有用。

演示版

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章