Почему я получаю этот UnicodeEncodeError, когда я вставляю в базу данных MySQL?

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
1
задан TIMEX 3 May 2010 в 21:39
поделиться

1 ответ

Если вы получаете исключение из 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
0
ответ дан 3 September 2019 в 00:51
поделиться
Другие вопросы по тегам:

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