mysqldb的python编码问题

mysqldb的python编码问题,python,encoding,mysql-python,Python,Encoding,Mysql Python,在使用xlrd和mysqldb时,我在python编码方面遇到问题。 我正在读一个excel文件,其中包含土耳其语字符 当我像这样打印值时,print sheet.cell(rownum,19).value会将İstanbul写入控制台,这是正确的。(Win7 Lucida ConsoleLine,编码为`cp1254) 但是,如果我想像这样将该值插入数据库 sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value+

在使用
xlrd
mysqldb
时,我在python编码方面遇到问题。 我正在读一个excel文件,其中包含土耳其语字符

当我像这样打印值时,
print sheet.cell(rownum,19).value
会将
İstanbul
写入控制台,这是正确的。(Win7 Lucida ConsoleLine,编码为`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)
插入的值没有任何错误,但变为
Ä°stanbul


您能告诉我如何将值
İstanbul
按原样放入数据库。

正如@Kazark所说,可能您的mysql连接器的编码没有设置

conn = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="root",
    port=3306,
    db="test1",
    init_command="set names utf8"
    )

当您初始化mysql的python连接器时,请尝试这样做。但请确保插入的内容是utf-8。

我同意,但这完全是关于MySQL的吗?我不知道什么是
xlrd
,但我猜问题出在MySQL方面。如果今晚我回家的时候还没有人回答你,也许我可以查一下我的代码,然后给出一个答案。我真的急需任何帮助!对不起,自从去年夏天我做了一个噩梦之后,我就没有用过这个了。仔细看,我确信您的问题是MySQL,而不是xlrd。您是否在连接上设置
使用\u unicode
?我怀疑你是。那很好。但是您还必须将MySQL的内部编码设置为UTF-8,这样它才能真正正常工作。对不起,我现在要走了,但看看你能不能在上面找到什么。
conn = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="root",
    port=3306,
    db="test1",
    init_command="set names utf8"
    )