MySQL в кодировке Python - PullRequest
       17

MySQL в кодировке Python

2 голосов
/ 17 февраля 2012

Этот пост совпадает с моим вопросом в MySQL в Python: UnicodeEncodeError: 'ascii' это просто чтобы прояснить ситуацию.

Я пытаюсь сохранить строку в базе данных MySQL, но получаю ошибку:

Файл ".smart.py", строка 51, в (число, текст, «умный», «у»)

UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xc2 в позиции 25: порядковый номер не в диапазоне (128)

и строка сохраняется в m ['Text']

Ляля * = # &% @ <> _:;?! - ' "/ () ¥ ¡¿

Вот фрагмент кода

risk = m['Text']
msg = risk.encode('utf8')
text = db.escape_string(msg)

sql = "INSERT INTO posts(nmbr, \
       msg, tel, sts) \
       VALUES ('%s', '%s', '%s', '%s')" % \
       (number, text, 'smart', 'u')

Если я попытаюсь закомментировать SQL-запрос и поставить напечатать текст , он выведет Lala * = # &% @ <> _?!:; - '"/ () ¥ ¡¿

Ошибка встречается только при обработке SQL.

Кодировка MySQL установлена ​​в utf8_unicode_ci. (или я должен изменить это?)

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

добавить эти параметры MySQLdb.connect(..., use_unicode=1,charset="utf8").

создайте курсор

cur = db.cursor()

и затем выполните так:

risk = m['Text']
sql = """INSERT INTO posts(nmbr, msg, tel, sts) \
         VALUES (%s, %s, %s, %s)"""
values = (number, risk, 'smart', 'u')
cur.execute(sql,values)  #use comma to separate sql and values, this will ensure values are escaped/sanitized
cur.commit()

теперь вам не нужны эти две строки:

msg = risk.encode('utf8')
text = db.escape_string(msg)
0 голосов
/ 18 февраля 2012

Не ясно, относится ли ваше значение m['Text'] к типу StringType или UnicodeType. Я держу пари, что это строка байтов (StringType). Если это правда, тогда добавьте строку m['Text'] = m['Text'].decode('UTF-8'), прежде чем ваша вставка может работать.

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