A
A
Alexander Melikhov2016-10-12 01:19:05
PHP
Alexander Melikhov, 2016-10-12 01:19:05

How to fix mysql write error "Incorrect string value"?

When I parse this page and try to write its content to the database, I get the following error:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xD0 ...' for column 'content'

Collation сначала был utf8_general_ci, потом, как почитал ответы на stackoverflow, поменял на utf8mb4_general_ci, и следом на utf8mb4_unicode_ci, ни одна не помогла.
Что интересно, данная ошибка проявляется только при парсинге этого сайта. Контент сайт отдает в utf8, даже не знаю, в чем тут проблема.

Answer the question

In order to leave comments, you need to log in

3 answer(s)
Артемий Фамилий, 2020-02-21
@APTEMOH

Подключение к БД так же нужно изменить на utf8mb4

I
Ilya, 2016-10-12
@glebovgin

Проблема в том, что в контенте встречаются символы, которые состоят не из 3 байтов как в UTF-8, а из 4-х (всякие смайлы, эмоджи и пр.), и для их хранения вам надо для поля content использовать SET utf8mb4, а COLLATION utf8mb4_unicode_ci.
Вот тут очень много по этому поводу написано.
UPD: и вторая опция - принудительно очищайте данные до подходящего UTF-8 текста.

Виталий, 2021-02-04
@MrCute

Решил ошибку на django так:
Изменил кодировку:
ALTER DATABASE portfolio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Поставил кодировку в настройке подключения к БД
'charset': 'utf8mb4',
И заработало после того как прописал такой параметр:
'init_command': 'SET NAMES utf8mb4',

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question