日期:2014-05-17  浏览次数:20822 次

通过db_link如何通过convert函数修改Oracle字符集
小弟现在做一个项目,需要用到另外一数据库,我现在在本地建立db_link将数据迁移至本地,但是那个数据库编码为US7ASCII,本地客户端数据库 编码为ZHS16GBK 于是产生中文乱码,类似于=p:~OX9zK0>V4z?*5c#1 这样一些字符串。 现在通过convert 函数查询,查询语句为select convert(nsrmc,'US7ASCII','ZHS16GBK') from dj_nsrxx@dblink_gs1 ; 不行,查出的字符为:??????????,我试了好几种编码都不行。我这边不能修改本地的编码方式,因为本地服务器还有其他几个实例,这种情况应该怎么样处理,急。。。
Oracle 数据库 编码

------解决方案--------------------
先确认一番:
是数据库里的信息乱码?还是你的连接乱码?还是显示乱码?
再有会对性处理。

你的以上描述,不全。
------解决方案--------------------
你本地操作系统的字符集全不全?把服务器的字符集复制一份到本地试试
------解决方案--------------------
引用:
小弟现在做一个项目,需要用到另外一数据库,我现在在本地建立db_link将数据迁移至本地,但是那个数据库编码为US7ASCII,本地客户端数据库 编码为ZHS16GBK 于是产生中文乱码,类似于=p:~OX9zK0>V4z?*5c#1 这样一些字符串。 现在通过convert 函数查询,查询语句为select convert(nsrmc,'US7ASCII','ZHS16GBK') from dj_nsrxx@dblink_gs1 ; 不行,查出的字符为:??????????,我试了好几种编码都不行。我这边不能修改本地的编码方式,因为本地服务器还有其他几个实例,这种情况应该怎么样处理,急。。。

通过DBLINK查询过来时已经是乱码,这时再用CONVERT没有用。
先在对端建个视图,转换成RAW类型
CREATE VIEW V_DJ_NSRXX AS SELECT utl_raw.cast_to_raw(nsrmc) nsrmc FROM dj_nsrxx;
然后再通过DBLINK查询
SELECT utl_raw.cast_to_varchar2(nsrmc) FROM v_dj_nsrxx@dblink_gs1;