请教个问题,我现在把数据库从oracle9i导入到10G,字符集原来是gb2312,导入后的字符集是utf8,在导入的过程中类似SBILLNO" (actual: 54, maximum: 50)这样的错误,我从导入日志里捕获了这样的信息,可以根据日志去查找所涉及原数据库的表字段,再导出再导入新数据库,但是现在数据库太大,这样的日志太多,信息靠人工提取不全,有没有什么办法能对原数据库字段转换成utf8后需要的字符宽度做出一次性的评估,并且成批修改呢,谢谢

解决方案 »

  1.   

    gb2312的字符有的在utf8中可能不存在,有的1个gb2312的字符,在utf8中需要多个字节存储,导致超出最大长度的错误。解决这个问题的王道,不是去增加列的长度等,而是应该把目标数据库的字符集改成gb2312.
    不容易出错的方法是:
    重新创建instance,选gb2312字符集。
    exp utf8的instance的数据,然后imp到新建的instance;
    exp 老gb2312的instance的数据,然后imp到新建的instance;
      

  2.   

    目标数据库不能修改字符集,因为目标数据库需要编程utf8的字符集。