使用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)
如果我将sql更改为
sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value.encode('utf8')+"')"
插入的值没有任何错误,但它变为Ä°stanbul
您能否告诉我如何将值İstanbul
原样放入数据库。
答案 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。