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

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

Проблема с сохранением asymmetric paragraphs в tmgmt

Октябрь 4, 2024 г.

Проблема описана вот тут, и там даже предлагается патч https://www.drupal.org/files/issues/2024-05-28/3134922-40.patch,который частично решает проблему, но в #43 siavash (Sia) более подробно рассказывает о том, как сохраняются данные, и становится ясно, ...

Читать

PHP: функция преобразования к каноническому пути

Январь 26, 2021 г.

На замену realpath, который работает только с реально существующими файлами и папками UNIX, а также не работающий для ссылок, я написал функцию получения канонического пути. В документации встречается функция eio_realpath, которая требует подключения ...

Читать

Программируем галерею в Drupal 7

Сентябрь 2, 2015 г.

Хотите сделать галерею своими руками, без сторонних модулей в Drupal? Тогда читайте дальше. Настроим поле для галереи Для начала нам надо определиться, ...

Читать

Функция сложения двух URL

Август 13, 2013 г.

Обычно задача возникает, когда мы исследуем скриптом html страничку, и нам нужно получить, используя её абсолютный адрес, адреса страниц на которые она ссылается. Для этого к текущему абсолютному адресу страницы, надо "добавлять" адреса других страниц. ...

Читать
 

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

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



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