今天要和一个数据库做人员基础数据同步,对方提供了连接串,结果连上去以后,发现查询对方的中文数据时都显示乱码,因此百度google了一通,其中有查到如下链接的帖子:
http://kennyblues.itpub.net/post/31846/455855
通过帖子中的办法,没有成功,因此基于它的实现方法,自己摸索,如下方法实现了正常显示
select * from nls_database_parameters 能查询数据库字符集、版本等信息
对方数据库:
NLS_CHARACTERSET 为 WE8ISO8859P1
NLS_NCHAR_CHARACTERSET 为 UTF8
本方数据库:
NLS_CHARACTERSET 为 ZHS16GBK
NLS_NCHAR_CHARACTERSET 为 AL16UTF16
实现方法:
1、在对方数据库建立视图:将中文字段用utl_raw.cast_to_raw转换
CREATE OR REPLACE VIEW v_view (
chinese_field
) AS
SELECT Utl_Raw.cast_to_raw(chinese_field) remark FROM table_name;
2、在本地数据库使用DBLINK直接查询
select convert(utl_raw.cast_to_varchar2(chinese_field), 'ZHS16GBK') chinese_field from v_view@db_link_name;