一个可怕的跨库访问字符集问题,请各位兄弟帮忙!万分感谢!

new_siberia 2007-10-17 12:40:18
一个可怕的跨库访问字符集问题,请各位兄弟帮忙!万分感谢!

我使用delphi7编的程序需要访问两个数据库,一个自己的数据库A是oracle9i,字符集SIMPLIFIED CHINESE_CHINA.ZHS16GBK,另外一个B是客户原有的oracle8i数据库,字符集是American_America.US7ASCII,不幸的是,也存储了中文。

现在的客户需求是,需要在同一个界面上比较两个数据库中传过来的两张表。很明显,本地客户端字符集设为ZHS16GBK 服务器A的数据显示不正确,设为US7ASCII 服务器B的数据显示不正确。
而在一个oracle session中动态改变数据库的字符集设置的方法我还没有找到!

另外,我在服务器A中设了一个dblink指向服务器B,然后在sqlplus中一起正常(除了中文乱码),在delphi程序中就显示:ORA-02041:客户数据库未开始一个事务处理 ,在网上查了下,有人说“把连接串中的驱动程序Provider=OraOledb.Oracle.1改成Provider=MSDAORA.Oracle;”可是经我的实验这没有用,难道是oracle的bug吗?

我曾经想过自己想办法把乱码恢复,可是发现这是不可能的:
例如在US7ASCII中“中文”两个字是BA BA D7 D6,传到ZHS16GBK时oralce就自作聪明的把每个字节最高位砍掉,改为 3A 3A 57 56,显示出来就是 '::WV',而服务器B输入的字符即可能是中文也可能是英文,比如服务器B输入'文WV',传到服务器A就变为'WVWV',也就是说数据发生了不可恢复的损失,我也不能自作聪明的将每个字符的最高位补上,那样会破坏服务器B中的英文数据。

我的问题的一些其他要求是:
1.服务器B由另外的专人管理,我不能在上面做任何除了读取数据外的操作;
2.读取服务器B的数据用来让客户方面的和服务器A中的某些数据作比较,因此必须在同一个界面下同时访问两个数据库。

请问各位大哥我这样的问题如何解决?谢谢了!
...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobfang 2007-10-18
  • 打赏
  • 举报
回复
你试试在delphi中连接两个数据库前分别修改环境变量nls_lang,看看是否可以。
bjt_ 2007-10-18
  • 打赏
  • 举报
回复
在客户端用java处理下
new_siberia 2007-10-17
  • 打赏
  • 举报
回复
US7ASCII的话用base64编码中文(自己选一个中文编码)
ZHS16GBK可以直接存GBK
之后比较的时候把两个都转化成为unicode
------------------------------------------------------------------

问题是我根本没办法读出US7ASCII的原始数据,都被oracle篡改过了
蒋晟 2007-10-17
  • 打赏
  • 举报
回复
US7ASCII的话用base64编码中文(自己选一个中文编码)
ZHS16GBK可以直接存GBK
之后比较的时候把两个都转化成为unicode

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧