oracle——存储数据时的编码问题

Posted 稚人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle——存储数据时的编码问题相关的知识,希望对你有一定的参考价值。

原文:https://blog.csdn.net/aachangs/article/details/87820818

 

数据库编码问题

新手入坑,第一次使用oracle数据库,还是与mysql略有不同,首先在插入数据时的SQL语法有很大不同,mysql写法:

1 insert into tablename values (%s,%s)

oracle中插入写法:

1 insert into tablename(ITEM_ID, CONTENT) values (:ITEM_ID, :CONTENT)

问题描述
mysql和python都是utf-8编码,oracle为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,想把mysql中的一些数据导入到oracle,琢磨着写个程序来导(毕竟程序猿),于是就发生了一下错误:

1 UnicodeEncodeError: ascii codec cant encode characters in position 0-1: ordinal not in range(128)

问题分析:引起这个问题的原因是编码格式不同,并不是由于python版本的问题引起的(当然,如果你的python版本是3.0以下也有可能,解决方法 import sys reload(sys) sys.setdefaultencoding(‘utf-8’)),但在python版本是3.0以上,就是两个数据库字符集不一样引起的。

解决方法
在连接oracle库的时候将encoding设置成UTF-8格式,问题解决。代码如下:

1 conn = cx_Oracle.connect(self.user+/+self.password+@+self.host+:+str(self.port)+/+self.db, encoding=utf8)

以上是关于oracle——存储数据时的编码问题的主要内容,如果未能解决你的问题,请参考以下文章

ManActivity + 启动时的片段差异

大型nvarchar2值返回时的oracle存储过程错误

oracle存储过程效率问题,处理1500w的数据插入

添加片段时的 FlyOut 菜单设计问题

如何在 Toad for Oracle 中使用自定义代码片段?

相同数据时的Oracle行锁更新