码迷,mamicode.com
首页 > 数据库 > 详细

<h1>CX_ORACLE汉字乱码的处理</h1>

时间:2018-08-01 22:27:47      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:导出   数据库   注册表   python3   成功   code   alt   字符   字节   

   环境:Python3.x+cx_Oracle6.x

   结论:只要 客户端的NLS_LANG设置与oracle数据库服务器的一致,且NLS_LANG不为WE8ISO8859P1,则汉字显示正常。

    故有必要将字符集为WE8ISO8859P1的oracle数据库,改为ZHS16GBK、UTF8等。实在不能修改字符集的话,则凡是出现汉字的地方,都要进行转码:x.encode(‘latin1‘).decode(‘gbk‘)   ——x为数据库里有汉字的字段。

 

      本人亲测:

  oracle数据库的原字符集为ZHS16GBK,将其改为WE8ISO8859P1,以便导入字符集为WE8ISO8859P1的dmp文件;导入后再将oracle数据库的字符集改回,汉字显示正常:

  1、 将老oracle的数据导出,字符集编码为WE8ISO8859P1

  2、新oracle数据服务器本身的编码为 ZHS16GBK。为导入编码为WE8ISO8859P1的dmp文件,临时改为 WE8ISO8859P1。并修改os的注册表或环境变量,使NLS_LANG=WE8ISO8859P1。然后重启oracle服务。

  3、导入 dmp文件(其真实的字符集亦为WE8ISO8859P1)。若在 客户机使用 imp 导入,注意客户机的NLS_LANG,务必是 WE8ISO8859P1。

  4、将oracle数据库的字符集改回 ZHS16GBK,修改os的注册表或环境变量,使NLS_LANG= ZHS16GBK。然后重启oracle服务。

  5、查询:汉字正常。

 

  注一:exp导出的包,直接修改对应的字节,可以骗过imp程序:导入时不报错。但是读取时,汉字乱码。

技术分享图片

 

   注二:网上高手说的修改oracle数据库字符集能成功的原理:

技术分享图片

 

<h1>CX_ORACLE汉字乱码的处理</h1>

标签:导出   数据库   注册表   python3   成功   code   alt   字符   字节   

原文地址:https://www.cnblogs.com/Afisher/p/9403820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!