最近在处理数据迁移的时候遇到了字符集不一致的问题,搞得很是头疼,过程如下
有新老两台服务器,字符集其实是一样的都是AMERICAN_AMERICA.AL32UTF8
但是NLS_NCHAR_CHARACTERSET却不一样,老机器上是AL16UTF16,新机器上是AL32UTF8,恰好我们的系统数据表很多都是NVARCHAR类型的字段,于是乎数据从老机器迁移过去后全是乱码,新机器也已经用了一段时间了,不可能重装,这就遇到个进退不得的问题,两边现在都有数据,且都有不兼容的字符集字段。
尝试了exp/imp,sql导出/导入,csv导出/导入,都解决不了乱码的问题
最后用了复制黏贴想试试,就是从一个表里直接把数据复制到另一个库的表里,随后发现了一个匪夷所思的问题。
当我select * from table1;时出来的依然都是乱码的显示。
但是当我select * from table1 for update;时显示却是正常的,乱码没有了。
反复试了几次都是这样,换不同的工具也是如此。这真是刷新了我对oracle的认识了,哪位能解答一下

解决方案 »

  1.   

    国家字符集 一般都是 AL16UTF16。。
    这个情况还真不好搞
      

  2.   

    最终是通过修改表的字段类型,勉强导成功了,但是弊端是整个上游系统所需的核心表的字段类型都被改掉了,还需要逐一验证新表对上游系统的影响。国家字符集只影响NCHAR,NVARCHAR,转换成CHAR,VARCHAR之后可以消除乱码问题。