Как решить проблему с кодировками в Python+MySQL?

Только начинаю осваиваться в вопросах БД, параллельно с сами MySQL изучаю ещё и библиотеку для python 2.7 - MySQLdb. Встал вопрос с записью русского текста в таблицу с помощью питона. В самой MySQL везде где можно поставил utf-8:
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+


Вот пример запроса на Python:
# -*- coding: utf-8 -*-
import MySQLdb
db=MySQLdb.connect(host='localhost',user='root',passwd='qwerty',db='new')
cursor=db.cursor()
name='миша'.encode('utf-8')
cursor.execute("INSERT INTO te(first,second) VALUES('%s','asda')",(name))


Скрипт отрабатывает с ошибкой:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
  • Вопрос задан
  • 7162 просмотра
Решения вопроса 1
nobodynoone
@nobodynoone
Я делал это вот так

# Если используется SQLAlchemy, то параметр кодировки можно вставить прямо в параметр
# подключения, например 
create_engine('postgresql+psycopg2://@localhost/test?charset=utf8')

# Если вы используете MySQLdb, то можно передать параметр charset и чтобы точно заработало
# еще и init_command. 
conn = MySQLdb.connect(charset='utf8', init_command='SET NAMES UTF8')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы