2011-08-10 64 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。