проблема кодирования Python с MySQL - PullRequest
0 голосов
/ 10 августа 2011

У меня проблемы с кодированием в python при использовании xlrd и mysqldb.Я читаю файл 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 в базу данных как есть.

1 Ответ

1 голос
/ 28 сентября 2014

Точно так же, как сказал @Kazark, возможно, кодировка вашего соединителя mysql не установлена.

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

Попробуйте, когда вы запускаете свой соединитель python для mysql.Но убедитесь, что содержимое вставлено в utf-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...