python通过 MySQLdb插入中文乱码

一、背景
        最近打算做一些股票的应用,通过爬虫抓取了一些财经网站的数据,然后保存在mysql数据库进行分析。基于爬虫使用了Python进行抓取数据,为了数据的编码统一性以及便利。决定全流程都使用UTF8编码,故此需要对部分非UTF8编码的网页数据进行编码转换。

二、操作:

全部环节都采取utf8编码,主要有以下几个部分内容:
1,数据源需要进行编码转换,把内容都转换为UTF8编码;
2,PYTHON脚本需要是UTF8编码,需要在代码开始注明 :#-*-coding:utf-8-*-
3,数据库字符集需要是utf8编码,表的字段内容等都需要统一Utf8

按照这个思路进行统一配置以后,插入中文,发现数据库显式的内容竟然是乱码。

三、分析:
没办法,只能一个个环节来排查,从python脚本编码,到数据源转换以后的编码、再到数据库字符集编码、数据库表编码、客户端编码等等。最后发现,这些环节都没有问题。
    毫无头绪的前提下,通过python 输出完成的SQL,拷贝到mysql客户端执行,竟然发现中文显式正常了。
     由此判断,问题应该不是出现在数据库和包含中文内容的SQL语句中,有可能是出现在插入数据的过程中对代码进行转换了。于是上网请教了一下度娘。发现MySQLdb,在连接数据库的时候指定charset=‘utf8’就中文不会乱码了,照单抓药,结果竟然成功了!中文显式正常。
    奇了怪了,结合度娘、官网文档,最后在
    connections.y文件中发现以下代码:
170         cursorclass = kwargs2.pop('cursorclass', self.default_cursor)
171         charset = kwargs2.pop('charset', '')                                                                                                                                                                 
172 
173         if charset:
174             use_unicode = True
175         else:
176             use_unicode = False
177 
178         use_unicode = kwargs2.pop('use_unicode', use_unicode)
179         sql_mode = kwargs2.pop('sql_mode', '')
180 
181         client_flag = kwargs.get('client_flag', 0)
通过判断参数charset是否设置,如果设置了,则use_unicode为true,否则为false。就是说 MySQLdb创建连接的时候,默认是不支持unicode编码的。需要通过参数指定,才可以。

四、总结:
    使用 MySQLdb操作数据库的时候,需要每次都根据需求制定 charset。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值