2011-08-10 13 views
0

xlrdmysqldbを使用しているときに、私はPythonでエンコーディングに問題があります。 私はそれにトルコ文字を含むExcelファイルを読んでいます。mysqldbでのPythonエンコーディングの問題

私はそのprint sheet.cell(rownum,19).valueのような値を印刷するとき、それが正しいとする、コンソールにİstanbulを書き込みます。(Win7のルシーダConsoleLine、エンコーディングは `cp1254ある)

しかし、私は

のようなデータベースにその値を挿入する場合私は

としてSQLを変更した場合
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 = "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と同じように、mysqlのコネクタのエンコーディングが設定されていない可能性があります。

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

mysqlのPythonコネクタを初期化するときにこれを試してください。しかし、挿入されたコンテンツがutf-8であることを確認してください。

関連する問題