General error 1366 incorrect string value…

Сегодня зачищал PDOException: SQLSTATE: General error: 1366. Происходила ошибка при записи в базу UTF строк, содержащих неизвестные базе данных UTF символы. По логам было ясно, что и куда пытается сохранить программа.

Путей решения маячило целых два:

  • «научить» базу понимать эти символы,
  • убирать символы, вызывающие проблему.

Но сначала хотелось разобраться, чем одни UTF символы отличаются от других. Я не вдавался в подробности того как кодируется UTF, какие они бывают.

Оказалось, что UTF содержит символы, кодируемые последовательностью от 1 до 4 байт. Вот как они шифруются в бинарном коде:

В моем случае проблемы с базой вызвали 4х байтные символы.

«Учим» базу

Можно поменять тип поля на BLOB, чтобы база не производила проверку валидности UTF. А можно проверить всю цепочку соединения с базой, чтобы переключиться на поддержку кодировки utf8mb4.

Лично мне, вся эта псевдографика, которая засунута в 4х-байтные таблицы utf, совершенна не нужна, потому я пойду вторым путем.

Убираем 4х-байтные символы UTF из текста

Для PHP получился вот такой шаблон для замены:

Если вдруг понадобится «почикать» 3х байтные, вот пример регулярного выражения и для него:

Написать комментарий

Мало букафф? Читайте есчо !

Фильтрация ботов в конфигурации varnish

Май 2, 2019 г.

Кроме полезных роботов, существует масса "пауков", сканеров, которые создают лишь избыточную нагрузку на ваш сайт, увеличивая время отклика сервера на запросы реальных пользователей. Более менее приличные боты сообщают о том, кто они, представляясь ...

Читать

Создаём админ пользователя через drush

Октябрь 4, 2017 г.

Если у вас нет админ доступа в drupal, но срочно надо его получить, то можно сделать следующие вещи: поменять email у админа и пройти процедуру восстановления ...

Читать

 

Комментарии к «General error 1366 incorrect string value…»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: