определить с помощью Python, приведет ли строка к ошибке «Неправильное значение строки» в MySQL - PullRequest
0 голосов
/ 03 июня 2018

У меня есть таблица в базе данных MySQL (5.7), в которой есть сопоставление utf8_unicode_ci , и в которую я вставляю некоторые данные с помощью Python (3.6).

С некоторыми строками(например, '\ xCE \ xA6') Я получаю «Неправильное значение строки» ошибка.Со стороны БД я могу отключить эту ошибку, отключив строгий режим в MySQL или изменив параметры сортировки поля на utf8mb4 .

Однако такие строки являются "аномалиями", и нежелательно изменять параметры сортировки или sql_mode.

Как я могу обнаружить в Python 3, что данная строка приведет к "неправильное строковое значение "ошибка с MySQL перед вставкой в ​​таблицу?

1 Ответ

0 голосов
/ 04 июня 2018

Где вы получаете сообщение об ошибке?Какая операция выполняется?

C3A6 - это гекс UTF-8 (см. MySQL utf8 или utf8mb4) для æ;кажется ли вероятным, что это был желаемый символ?

Чтобы обработать utf8 (или utf8mb4), вам необходимо определить, какая кодировка клиента .Похоже, UTF-8.Итак, при подключении к MySQL, скажите ему, что - используйте их при вызове подключения:

charset="utf8", use_unicode=True

Если символ находится в исходном коде Python, вам нужно

# -*- coding: utf-8 -*-

вначало источника.

Кроме того, столбец, в который вы вставляете, должен быть CHARACTER SET utf8 (или utf8mb4).

utf8mb4 необходим для эмодзи и некоторых китайцев;в противном случае он «эквивалентен» utf8.

. Не используйте decode() или любые другие функции преобразования;это только сделает вещи труднее исправить.На этой арене два несправедливости не дают права;это еще хуже.

Если у вас есть другие симптомы искаженных символов, см. Проблема с символами UTF-8;я вижу не то, что сохранил

Для дальнейшего обсуждения, пожалуйста, предоставьте вызов соединения, соответствующий оператор SQL, SHOW CREATE TABLE и все остальное.

C3A6является допустимым символом utf8 / utf8mb4 æ и может интерпретироваться как действительный, хотя и маловероятный, latin1 æ.Но это неверно для CHARACTER SET ascii.(Я не знаю, как появилось сообщение об ошибке, если в сообщении не указано ascii или какая-то неясная кодировка.)

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