UnicodeEncodeError: 'latin-1' codec can't encode character

刚刚导入MySQLdb库用python连接数据库时出现了

'latin-1' codec can't encode character '\u9648' in position 0: ordinal not  in range(256)
的错误。

查了很多问答和文档,发现这是因为MySQLdb通常会尝试将所有东西都编码为latin-1。但是一些我们希望存入数据库的字符和latin-1相冲突,或者超过了latin-1的字符集,以至于不能编码字符。

所以我们通常应该在数据库和页面中使用UTF-8,因为这个编码允许使用任何字符。还应该告诉MySQL使用的是UTF-8字符串(通过设置数据库连接和字符串列上的排序规则),以便它可以不区分大小写的比较和排序。

方法如下:

在连接的时候:
db=MySQLdb.connect(host='127.0.0.1',user=user,passwd=pwd,db=database,port=3306, (use_unicode = True),charset="utf8")
在连接成功后:
db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;')
dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')
其中"db"表示MySQLdb.connect(),而"dbc"表示 db.cursor()。

你可能感兴趣的:(python,MySQL)