2011-08-10 65 views
0

我在使用xlrdmysqldb时在python中编码时遇到了麻烦。 我正在阅读一个包含其中的土耳其字符的excel文件。python mysqldb编码问题

当我打印像print sheet.cell(rownum,19).value写入İstanbul安慰,这是正确的数值。(Win7的龙力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

MySQL + UTF-8 =噩梦 –

+0

我同意但是这完全是关于MySQL吗? – brsbilgic

+0

我不知道'xlrd'是什么,但我的猜测是这个问题出在MySQL的身上。如果有些更有知识的人今晚晚上回家时还没有回答你,也许我可以查看一些我的代码,并且实际上给出了某种答案。 –

回答

1

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

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

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