Python与MySQLdb的编码问题
我在使用 xlrd
和 mysqldb
时遇到了编码的问题。
我正在读取一个包含土耳其字符的 Excel 文件。
当我用 print sheet.cell(rownum,19).value
打印值时,控制台显示的是 İstanbul
,这没问题。(我用的是 Windows 7 的 Lucida Console,编码是 `cp1254`)
但是,如果我想把这个值插入到数据库中,像这样:
sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value+"')"
cursor.execute (sql)
db.commit()
就会出现错误:
Traceback (most recent call last):
File "excel_employer.py", line 112, in <module> cursor.execute (sql_deneme)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 157, in execute
query = query.encode(charset)
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u0130' in position
41: ordinal not in range(256)
如果我把 SQL 改成:
sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value.encode('utf8')+"')"
这个值就能成功插入,但变成了 İstanbul
。
你能告诉我怎么才能把 İstanbul
正确地插入到数据库中吗?
1 个回答
1
就像@Kazark说的,可能你的MySQL连接器的编码没有设置好。
conn = MySQLdb.connect(
host="localhost",
user="root",
passwd="root",
port=3306,
db="test1",
init_command="set names utf8"
)
试试这个,在你初始化Python的MySQL连接器时。不过要确保插入的内容是utf-8编码的。