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

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

Перезапись ветки данными из origin

Ноябрь 8, 2018 г.

Когда что то не просто пошло не так, а зашло слишком далеко, как восстановить состояние из удаленного репозитория (origin)? Я прибегаю к этому методу, если эксперименты в очередной раз зашли в тупик, а [crayon-6a505db47e7ba149438618/] требует ...

Читать

Где взять CLI клиент jenkins

Февраль 18, 2022 г.

Если нет возможности подключиться к jenkins через web-интерфейс удаленно, то команды можно выполнять через CLI клиент локально. Но где его взять? ...

Читать

Как получить bounds, зная центр области и радиус?

Февраль 20, 2019 г.

Да, речь идет о map.google.api. Типичная задача преобразования, т.к. многие объекты и службы карт Гугл работают с bounds, а на практике задача ставится исходя из центра и области. Для перевода воспользуемся объектом гугл: google.maps.Circle. ...

Читать

Программируем добавление шаблонов в Drupal 7

Июнь 9, 2011 г.

Речь пойдет о том, как добавить в стандартный список имен шаблонов свой шаблон, который обрабатывается шаблонизатором  drupal,  для конкретного "своего" случая. Начать нужно с того, что здесь описаны стандартные имена шаблонов для семерки. Имена ...

Читать
 

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

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



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