ORACLE不同字符集数据库数据同步 问题:数据库A的字符集是US7ASCII,数据库B的字符集是ZHS16GBK,通过在数据库B上创建A的dblink查询A的数据但出现乱码。 解决方法: 在A库中创建一个视图,用utl_raw.cast_to_raw 函数对中文字段进行转换,在B库select该视图,用utl_raw.cast_to_varchar2函数对中文字段再转化一次 1.应用: 在database a中: sql>select a.remark from a@db_link_b; db_link_b连到database b 中文出现乱码。 其中database a的数据库字符集为:AMERICAN_AMERICA.WE8ISO8859P1. database b的数据库字符集为: AMERICAN_AMERICA.UTF8. 日常,database b的客户端用CHINESE_CHINA.ZHS16GBK 往数据库输入汉字。 解决方案如下: 1、先在database b,user b中建view,将中文字段用utl_raw.cast_to_raw转换 CREATE OR REPLACE VIEW view_1 ( remark ) AS SELECT Utl_Raw.cast_to_raw(remark) remark FROM b.table; 2、在database a上用如下的sql来select就可以正常显示中文了: SELECT Convert(Convert(UTL_RAW.CAST_TO_VARCHAR2(remark),'ZHS16GBK','UTF8'),'WE8ISO8859P1') FROM b.view_1@db_link_b; |
|