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

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

Как проверить занят ли в port в unix

Январь 31, 2023 г.

... и выполнить те или иные операции в зависимости от результата проверки, используя командный процессор, например bash. Примерно так формулируется очередная небольшая задача, возникающая в ежедневном потоке рутины автоматизации работы. Существует ...

Читать

Как полностью затереть локальную ветку и привести её к состоянию из удаленного репозитория

Август 21, 2026 г.

Бывают ситуации, когда локальные изменения в ветке настолько запутались, что проще полностью сбросить всё и начать «с чистого листа» от удаленной версии. В этой статье рассмотрим два надежных способа, как это сделать. Ситуация Представьте: вы ...

Читать

Drupal vs Opencart

Апрель 20, 2023 г.

Сразу скажу, что я друпалер, поэтому перевес будет не в сторону Opencart. Но попробуем разобраться объективно. Сравнивать CMS Drupal с Opencart ...

Читать

Копируем файлы с AWS S3

Сентябрь 26, 2019 г.

На AWS файлы копятся в течении жизни проекта, а для разработки иногда удобнее иметь их локально. Как перетащить их из облака (и закинуть потом обратно), пользуясь консолью, расскажу в статье. Направление операции копирования в данном случае не ...

Читать
 

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

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



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