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"
)