mysqldb的python编码问题

时间:2011-08-10 13:39:43

标签: python encoding mysql-python

使用xlrdmysqldb时,我在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)

如果我将sql更改为

sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value.encode('utf8')+"')"

插入的值没有任何错误,但它变为Ä°stanbul

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

1 个答案:

答案 0 :(得分:1)

正如@Kazark所说,也许没有设置mysql连接器的编码。

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

在初始化mysql的python连接器时尝试这个。但请确保插入的内容是utf-8。