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

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

Модуль flag не работает, если контент загружен по ajax. Что делать?

Март 11, 2017 г.

Если вы пользуетесь модулем flag в Drupal, то можете столкнуться с ситуацией, что загруженные по ajax переключатели флагов не работает. Такая ситуация происходит всегда, когда требуется особенная инициализация после загрузки страницы, ситуация с flag ...

Читать

Включаем сессии в Wordpress

Апрель 17, 2016 г.

В сессиях удобно хранить что то, связанное с текущей деятельностью пользователя. Оказалось, что в Wordpress сессии не запускаются движком. Стартовать их нужно самостоятельно. Впрочем, запуск сессий где то посреди шаблона не прокатит. Нужно подключить ...

Читать

Функционал Sites.php в Drupal 6

Июль 6, 2016 г.

Для организации мультисайтинга в Drupal 7 можно использовать специальный файл sites.php, содержащий массив перенаправлений. Этот массив задаёт соответствия между запрашиваемыми доменными именами (и др. параметрами http запроса) и конечными папками, содержащими ...

Читать

Настраиваем патчи в composer на примере drupal проекта

Май 14, 2025 г.

Drupal давно использует composer для управления зависимостями и для загрузки/обновления модулей. Composer кроме всех прочих полезностей позволяет наладить ...

Читать
 

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

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



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