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

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

Как узнать количество строк в PostgreSQL без COUNT(*)

Июль 27, 2026 г.

В повседневной работе с PostgreSQL иной раз возникает задача оценить или узнать точное число строк в таблице. Классический способ — SELECT COUNT(*) FROM table — работает, но для больших таблиц он может быть медленным, поскольку выполняет полное сканирование ...

Читать

Пара способов добраться до индекса родительского цикла ng_repeat в Angular

Ноябрь 18, 2016 г.

Если вы начали применять вложенные циклы ng_repeat, но не сильно вникали как это работает, то могли столкнуться с проблемой видимости итератора внешнего цикла во внутреннем. В контексте цикла Angular создает несколько переменных, одна из них - ...

Читать

Добавление произвольного эффекта в виды показа изображений

Июнь 17, 2015 г.

Сегодня разберем то, как создать собственный эффект для обработки изображений в Drupal 7. Для этого нам понадобится модуль Imagecache Custom Actions из ...

Читать

Не работает drag-n-drop для нескольких TableField полей в одной форме

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

Если вы увлеклись использованием данного Drupal модуля (под 7ку) настолько, что добавили в форму несколько полей типа tablefield, то заметите, что перемещение строк а-ля драг-n-дроп работает только для первого из полей. Причина в том, что таблицы ...

Читать
 

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

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



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