UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)
Я изменил свое значение по умолчанию базы данных, чтобы быть utf-8, и не "латинский"...., но эта ошибка все еще происходит. почему?
Это находится в my.cnf. Я делаю эту несправедливость? Я просто хочу, чтобы ВСЕ БЫЛО UTF-8.
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server = utf8
collation-server = utf8_general_ci
default-character-set=utf8
Если вы получаете исключение из Python, то это никак не связано с MySQL - ошибка происходит до того, как выражение отправляется в MySQL. Я бы предположил, что драйвер MySQLdb не обрабатывает юникод.
Если вы имеете дело с необработанным интерфейсом MySQLdb, это будет несколько раздражать (обертки баз данных, такие как SQLAlchemy, будут обрабатывать эти вещи за вас), но вы можете захотеть создать функцию вроде этой:
def exec_sql(conn_or_cursor, sql, *args, **kw):
if hasattr(conn_or_cursor):
cursor = conn_or_cursor.cursor()
else:
cursor = conn_or_cursor
cursor.execute(_convert_utf8(sql), *(_convert_utf8(a) for a in args),
**dict((n, _convert_utf8(v)) for n, v in kw.iteritems()))
return cursor
def _convert_utf8(value):
if isinstance(value, unicode):
return value.encode('utf8')
else:
return value