amelihovv
@amelihovv
Фулстек веб разработчик

Как исправить ошибку при записи в mysql «Incorrect string value»?

Когда я парсю вот эту страницу и пытаюсь записать ее контент в базу данных, я получаю следующую ошибку:
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xD0 ...' for column 'content'

Collation сначала был utf8_general_ci, потом, как почитал ответы на stackoverflow, поменял на utf8mb4_general_ci, и следом на utf8mb4_unicode_ci, ни одна не помогла.
Что интересно, данная ошибка проявляется только при парсинге этого сайта. Контент сайт отдает в utf8, даже не знаю, в чем тут проблема.
  • Вопрос задан
  • 44213 просмотров
Пригласить эксперта
Ответы на вопрос 3
APTEMOH
@APTEMOH
Пишу чат ботов, телеграм ботов, ботов во вконтакте
Подключение к БД так же нужно изменить на utf8mb4
Ответ написан
glebovgin
@glebovgin
Full Stack Web Developer
Проблема в том, что в контенте встречаются символы, которые состоят не из 3 байтов как в UTF-8, а из 4-х (всякие смайлы, эмоджи и пр.), и для их хранения вам надо для поля content использовать SET utf8mb4, а COLLATION utf8mb4_unicode_ci.
Вот тут очень много по этому поводу написано.

UPD: и вторая опция - принудительно очищайте данные до подходящего UTF-8 текста.
Ответ написан
Комментировать
@MrCute
Студент
Решил ошибку на django так:

Изменил кодировку:
ALTER DATABASE portfolio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Поставил кодировку в настройке подключения к БД

'charset': 'utf8mb4',

И заработало после того как прописал такой параметр:
'init_command': 'SET NAMES utf8mb4',
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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