Python与MySQLdb的编码问题

0 投票
1 回答
3217 浏览
提问于 2025-04-16 23:17

我在使用 xlrdmysqldb 时遇到了编码的问题。

我正在读取一个包含土耳其字符的 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编码的。

撰写回答