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

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

Bootstrap - показ произвольного html контента подсказки в popover

Июнь 14, 2021 г.

Один из компонентов Bootstrap - popover - создаёт оформление и показывает текст подсказки при нажатии на контейнер. Рассмотрим более сложный кейс использования этого компонента, а именно, создание контента для popover на лету. Стандартный шаблон ...

Читать

Авторизация по емайл (email) в CMS Drupal

Май 6, 2010 г.

Сейчас куда ни глянь, пошла мода в качестве имени при авторизации использовать не пресловутый login, а адрес электронной почты. И это действительно удобно. Адрес почты уникален для каждого пользователя, хорошо запоминается самим пользователем и не возникает ...

Читать

Sweet alert: как убрать вообще все кнопки

Апрель 11, 2023 г.

По дефолту, если вы не задаёте кнопок, то плагин всё равно добавляет кнопку 'Ок'. Разбираемся, как удалить и её. В настройках есть такой параметр как showConfirmButton, который по умолчанию принимает значение true. Требуется лишь задать его false, ...

Читать

Как убрать поле ввода времени в date_popup

Март 22, 2018 г.

Если вы используете в своей форме (API Drupal 7) поле даты, поставляемое модулем date/date_popup,  то возможно, хотели бы избавиться от поля ввода времени. ...

Читать
 

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

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



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