general error 1366 incorrect string value

В БД имеется таблица, созданная запросом

При попытке совершить запрос

insert into SUBJECT (SUBJ_ID, SUBJ_NAME, HOUR, SEMESTER) values (1, ‘Биология’, 119, 1);

Error Code: 1366. Incorrect string value: ‘xD0x91xD0xB8xD0xBE. ‘ for column ‘SUBJ_NAME’ at row 1

Когда я парсю вот эту страницу и пытаюсь записать ее контент в базу данных, я получаю следующую ошибку:

Collation сначала был utf8_general_ci, потом, как почитал ответы на stackoverflow, поменял на utf8mb4_general_ci, и следом на utf8mb4_unicode_ci, ни одна не помогла.
Что интересно, данная ошибка проявляется только при парсинге этого сайта. Контент сайт отдает в utf8, даже не знаю, в чем тут проблема.

Сегодня зачищал PDOException: SQLSTATE: General error: 1366. Происходила ошибка при записи в базу UTF строк, содержащих неизвестные базе данных UTF символы. По логам было ясно, что и куда пытается сохранить программа.

Путей решения маячило целых два:

  • «научить» базу понимать эти символы,
  • убирать символы, вызывающие проблему.

Но сначала хотелось разобраться, чем одни UTF символы отличаются от других. Я не вдавался в подробности того как кодируется UTF, какие они бывают.

Оказалось, что UTF содержит символы, кодируемые последовательностью от 1 до 4 байт. Вот как они шифруются в бинарном коде:

Оцените статью