oracle跨数据库通讯乱码问题
2015-01-20 21:25
351 查看
oracle不同数据库之间可以通过DBLINK进行通讯,但是如果两个数据库是不同字符集,那么在获取中文字符时可能显示的就是乱码。
假设:
数据库A字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
下有表AA
数据库B字符集为AMERICAN_AMERICA.WE8ISO8859P1
在数据库B上建立连结A的DBLINK:
说明:ORACLE10G以下版本对密码大小写不敏感,除非在设置密码的时候将密码加上双引号,否则大小写密码都可以登录系统,11g开始密码默认区分大小写,所以在连结11g数据库或者其他异构数据库时需要将密码加上双引号。
现在我们在B库查询一下A库的aa表:
数据是查询出来了,但是中文部分变成了靠!
没关系,我们可以通过utl_raw.cast_to_raw函数在A库将有中文的列转换为16进制,为了以后长期使用我们建立一个视图:
查询一下
在B库上通过utl_raw.cast_to_varchar2将16进制再转换为中文,我们同样建一个视图:
查询一下
OK,大功告成!
不过在有些特殊环境下,按这种方法查询出来的还是乱码,可能是那个数据库的字符集比较特殊,我们可以将A库的字符集先转换成我们指定的字符集,再转换成16进制
如:
假设:
数据库A字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
下有表AA
数据库B字符集为AMERICAN_AMERICA.WE8ISO8859P1
在数据库B上建立连结A的DBLINK:
create database link test connect to system identified by password using 'test';</span>
说明:ORACLE10G以下版本对密码大小写不敏感,除非在设置密码的时候将密码加上双引号,否则大小写密码都可以登录系统,11g开始密码默认区分大小写,所以在连结11g数据库或者其他异构数据库时需要将密码加上双引号。
现在我们在B库查询一下A库的aa表:
select * from aa@test
数据是查询出来了,但是中文部分变成了靠!
没关系,我们可以通过utl_raw.cast_to_raw函数在A库将有中文的列转换为16进制,为了以后长期使用我们建立一个视图:
create view v_aa as select a1, utl_raw.cast_to_raw(a2) a2 from aa;
查询一下
select * from v_aa;
在B库上通过utl_raw.cast_to_varchar2将16进制再转换为中文,我们同样建一个视图:
create or replace view v_aa as select a1, utl_raw.cast_to_varchar2(a2) a2 from v_aa@test;
查询一下
select * from v_aa;
OK,大功告成!
不过在有些特殊环境下,按这种方法查询出来的还是乱码,可能是那个数据库的字符集比较特殊,我们可以将A库的字符集先转换成我们指定的字符集,再转换成16进制
如:
select UTL_RAW.cast_to_raw( Convert('中文123','ZHS16CGB231280')) from dual;
相关文章推荐
- Oracle 10g Express Edition(XE) 转至数据库主页中文乱码问题的解决
- oracle数据库,关于乱码问题的解决方案
- 操作系统是64位 oracle 数据库表结构乱码问题
- 将现有的sql脚本导入 Oracle 数据库,中文乱码问题
- python 链接 ORACLE 数据库,并打印数据.解决中文乱码问题
- [Database] Oracle: Oracle 9i 数据库乱码(字符集)问题解决方案
- python 链接 ORACLE 数据库,并打印数据.解决中文乱码问题
- 【Oracle】数据库乱码问题的解决
- PHP使用ORACLE 数据库时的乱码问题
- 挑战Oracle OLEDB Data Provider在西文数据库上乱码问题!
- red hat下使用oracle instant client的occi接口读写数据库中文乱码问题
- 解决Linux下Oracle 10g数据库em,dbca中文方块乱码问题
- DBProvider 连接 Oracle 10g 数据库的问题
- 解决使用ASP无法连接 ORACLE 9i 数据库的问题。
- mySQL4.1以上版本数据库乱码问题彻底研究
- 解决Struts插入数据库中文乱码问题
- 乱码问题(2):如何把原有数据库的GBK作内码的数据转成UTF-8?
- 今天通过修改Oracle 数据库解决的一个ERP不能打出验收单问题.
- oracle中的数据库乱码的原因与解决
- Oracle E-Business Suite的数据库管理员面试时的技术问题及答案