1.問題:在windows環境下使用PyCharm時,我想向mysql的一張表中插入數據,代碼如下
import MySQLdb
from scrapy.conf import settings
class XiaoHuar_Pipeline(object):
def process_item(self, item, spider):
host = settings['MYSQL_HOST']
user = settings['MYSQL_USER']
psd = settings['MYSQL_PASSWORD']
db = settings['MYSQL_DB']
port = settings['MYSQL_PORT']
charset = settings['CHARSET']
con = MySQLdb.connect(host=host,user=user,passwd=psd,db=db,port=port)
cue = con.cursor()
print "mysql connect successfully"
sql = "insert into girl(name,school,pic) values('{0}','{1}','{2}')".format(item['name'],item['school'],item['pic'])
cue.execute(sql)
con.commit()
con.close()
return item
由於插入的數據中有中文,mysql中出現了亂碼
2.原因:考慮到我的數據庫編碼是utf-8
於是我在連接數據庫時,加入charset='utf-8',結果出現錯誤
con = MySQLdb.connect(host=host,user=user,passwd=psd,db=db,port=port,charset='utf-8')
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "D:\PyWorkspace\p1\p1\pipelines.py", line 17, in process_item
con = MySQLdb.connect(host=host,user=user,passwd=psd,db=db,port=port,charset='utf-8')
File "C:\Python27\lib\site-packages\MySQLdb\__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 215, in __init__
self.set_character_set(charset)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 294, in set_character_set
super(Connection, self).set_character_set(charset)
OperationalError: (2019, "Can't initialize character set utf-8 (path: c:\\Program Files\\MySQL\\MySQL Server 5.1\\\\share\\charsets\\)")
通過google之後發現,原來python2中使用的是'utf8'而不是'utf-8',於是對代碼進行修改
con = MySQLdb.connect(host=host,user=user,passwd=psd,db=db,port=port,charset='utf8')
更改之後,中文就可以正常插入數據庫了。