用Python编写写MySQL数据库程序的时候,出现如题错误。属于编码错误。
之前已经改过MySQL的/etc/my.cnf 文件(这个网上很多文章,不详述了)。用status查看数据库,如下:
mysql> status
--------------
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.26, for osx10.8 (x86_64) using EditLine wrapper
Connection id: 3
Current database: doubanspider
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.6.26 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 1 hour 28 min 5 sec
可以看到已经没有 latin-1 了,所以爆出'latin-1' codec can't encode character 还是比较不理解的。于是在网上找到了解决办法
http://blog.csdn.net/shuifa2008/article/details/9254389
全文转载记录如下:
UnicodeEncodeError: 'latin-1' codec can't encode character
"UnicodeEncodeError:'latin-1' codec can't encode character ..."
This is because MySQLdb normally tries to encode everythin to latin-1. This can be fixed by executing the following commands right after you've etablished the connection:
db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;') dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')
"db" is the result of MySQLdb.connect, and "dbc" is the result of db.cursor().
意思就是MySQLdb正常情况下会尝试将所有的内容转为latin1字符集处理
所以处理方法就是,设置连接和游标的charset为你所希望的编码,如utf8
db是connection连接,dbc是数据库游标
http://stackoverflow.com/questions/3942888/unicodeencodeerror-latin-1-codec-cant-encode-character
按照上面改了之后,亲测有效。