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

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

Цепляем js-скрипт после ajax-вызова в Drupal 7

Май 5, 2017 г.

После выполнения загрузки данных по ajax, может потребоваться инициализация скриптов для только что полученного куска HTML. Как данный механизм реализован в Drupal 7? По большому счету, требуется добавить js код в секцию success после вызова ...

Читать

Подключаем иконку на сайт, favicon

Ноябрь 7, 2015 г.

Иконка, отображаемая на вкладке браузера, перед названием страницы называется favicon (от англ. FAVorite ICON — «значок для избранного»). Эти иконки используются ...

Читать

Анатомия форм в друпал 6 (forms in drupal 6)

Сентябрь 27, 2012 г.

Захотелось немного обобщить и так уже известные всем вещи. Но для, тех кто только начал знакомить с формами drupal (Forms API), материал будет полезен. Вместо введения Любая форма, созданная в drupal методом drupal_get_form, становится благодаря ...

Читать

Определить гео - координаты города

Июнь 2, 2016 г.

Найти координаты города, точки на карте проще простого. Откройте карту гугл и кликните в нужном месте карты. Появится маркер и подсказка с координатами. ...

Читать
 

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

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



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