一个可怕的跨库访问字符集问题,请各位兄弟帮忙!万分感谢!我使用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中的某些数据作比较,因此必须在同一个界面下同时访问两个数据库。请问各位大哥我这样的问题如何解决?谢谢了!
而在一个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中的某些数据作比较,因此必须在同一个界面下同时访问两个数据库。请问各位大哥我这样的问题如何解决?谢谢了!
解决方案 »
- 创建job时会检查job中要执行的语句吗?
- 求助 ORACLE问题
- 急!怎么将Oracel中全角的数字(nvarchar2)转为int类型的数字。
- 查询
- 外键引用失败...请问该怎么办啊??
- v$sysstat,v$license,v$resource_limit相关问题
- 请教个语句
- Oracle 9i 与Oracle 8.0.5的兼容性问题!
- oracle administration assistant for windows nt数据库的进程信息?
- 小弟能够熟练使用asp+accses来弄点东西,可是有人要我用oracle来开发~怎么办?
- 跨表有条件的插入数据
- Oracle为什么函数返回的字符串不能作为where子句的条件
ZHS16GBK可以直接存GBK
之后比较的时候把两个都转化成为unicode
ZHS16GBK可以直接存GBK
之后比较的时候把两个都转化成为unicode
------------------------------------------------------------------问题是我根本没办法读出US7ASCII的原始数据,都被oracle篡改过了