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х байтные, вот пример регулярного выражения и для него:

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

References WP plugin

Июнь 22, 2016 г.

Искал плагин для Wordpress, который бы позволил связывать публикации друг с другом. Видно, что не я один искал. :) Пришлось написать свой плагин, разместил ...

Читать

Создание таблиц в статьях на Wordpress

Июнь 27, 2017 г.

WP из коробки хоть и содержит визуальный редактор HTML, но с минимальным набором инструментов. Таблицы вы создавать можете, только если напишите HTML код ...

Читать

Crop модуль для картинок Drupal

Декабрь 2, 2017 г.

Искал по работе crop модуль, который позволит редактору сайта выполнять обрезку картинки в админке при загрузке изображения в форму публикации. На Drupal.org ...

Читать

Убрать мета тег generator в WP

Январь 12, 2017 г.

Не знаю как родилась идея у разработчиков WP выводить информацию о текущей версии используемого сайтом движка. Речь идет о добавлении в секцию head мета тега "generator". Выглядит этот тег, например, вот так: [crayon-6987d12367494087825597/] ...

Читать
 

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

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



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