В БД имеется таблица, созданная запросом
При попытке совершить запрос
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 байт. Вот как они шифруются в бинарном коде: