数据库A:Oracle 8    字符集US7ASCII
数据库B:Oracle 10   字符集ZHS16GBK我现在在oracle10上面建立了一个dblink,然后写了一个作业想把Oracle8的数据库定时导入到Oracle10。但插入的数据库都变成了乱码。现在想问在Oracle中有没有办法解决这个问题,比如有什么转换函数等。

解决方案 »

  1.   

    取8i的结果以后,将字符串从"iso-8859-1"转换成"gbk",再插入到10g,基本上就不会有问题了。
      

  2.   

    使用UTL_FILE.PUTF_NCHAR将8i数据导出,在导入没有乱码
      

  3.   

    先用 convert(colname,'ZHS16GBK','US7ASCII') 函数试试
      

  4.   

    试了一下convert(colname,'ZHS16GBK','US7ASCII'),不灵~~~还是问号
      

  5.   

    那就用 utl_raw 转换。
    可以分步验证一下:
    先将列值转换为二进制,验证其是否为正确的 ASCII 编码
    utl_raw.cast_to_raw(colname)
    再进行编码转换,验证转换后是否为正确的 ZHS16GBK 编码
    utl_raw.convert(utl_raw.cast_to_raw(colname),'AMERICAN_AMERICA.ZHS16GBK','AMERICAN_AMERICA.US7ASCII')
    最后转换为字符类型
    utl_raw.cast_to_varchar2(utl_raw.convert(utl_raw.cast_to_raw(colname),'AMERICAN_AMERICA.ZHS16GBK','AMERICAN_AMERICA.US7ASCII'))