powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
6 сообщений из 6, страница 1 из 1
MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
    #39646203
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, всем.

Сегодня столкнулся с такой проблемой: при записи в JSON-формате сырых данных из API vk.com для целей тестирования, обнаружил такое сообщение. Выяснил что надо чтобы кодировка поля была не utf8, а теперь модно utf8mb4, сделал alter table и поменял кодировку, но ошибка осталась .. что делать?

Это JSON-строка, оригинал того, что пробую воткнуть в БД:

{"type":"message_reply","object":{"id":38753,"date":1526533976,"out":1,"user_id":218070853,"read_state":1,"title":"","body":"Елизавета добрый день☀☀☀подали заявление?💖","random_id"emoji":1,"from_id":62405192},"group_id":71952396,"secret":"93069a43842d69eb314b743b82905a7b"}

1. Не лезет в БД ни в таком виде (с html спецсимволами) ни после html_entity_decode() из PHP..
2. PHP Yii2 это чудо вообще вешается на содержимое такого POST-запроса из API vk.com .. выдает ошибку парсинга тела сообщения .. нашел, исправил. При этом json_decode() вполне нормально переваривает такой текст. Проверил отдельно.

Как это победить? Помогайте.. :)
...
Рейтинг: 0 / 0
MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
    #39646204
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Код: html
1.
{"type":"message_reply","object":{"id":38753,"date":1526533976,"out":1,"user_id":218070853,"read_state":1,"title":"","body":"Елизавета добрый день☀☀☀подали заявление?💖","random_id"emoji":1,"from_id":62405192},"group_id":71952396,"secret":"93069a43842d69eb314b743b82905a7b"}



Наверное так тут надо .. подзабыл уже.
...
Рейтинг: 0 / 0
MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
    #39646290
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Пасибки. Кое что стало понятно. Это смайлики Emoji вконтактника и похоже что они и не лезут в юникод.

Однако, осталось непонятным: почему PHP-шная 7.2 json_decode() их спокойно перекодирует в юникод, а в MariaDB 10.2 они не лезут.
И ещё почему они не записываются как html спец.символы без перекодировки в базу прямо текстом ...; тоже ещё не разобрался.
...
Рейтинг: 0 / 0
MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
    #39646367
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Это смайлики Emoji вконтактника и похоже что они и не лезут в юникод.Нуууу... Вы то как-то скопипастили их в сообщение форума. И веб-браузер что-то нарисовал. Или это левый код?

Arhat109Однако, осталось непонятным: почему PHP-шная 7.2 json_decode() их спокойно перекодирует в юникод, а в MariaDB 10.2 они не лезут.Скорее, PHP не перекодирует, а воспринимает последовательность байтов, как валидный юникод.
Лезут или не лезут - это уровня детского сада... Кроме Вас никто в точности не знает ни структуры таблицы, ни настроек соединения, ни кода, который выполняется, ни сообщений об ошибках. ПокАжите тестовый пример с реальными данными - можно говорить конкретно. А так, только предположить можно, что, если поле таблицы гарантировано в utf8mb4, то кодировка соединения с СУБД осталась старой.

Arhat109И ещё почему они не записываются как html спец.символы без перекодировки в базу прямо текстом ...; тоже ещё не разобрался.А почему они должны преобразовываться именно в html-сущности, а не в восьмеричное или двоичное представление числа, к примеру? ;-) Тоже веселый результат на выходе получится.
Что отправляете в базу - то и пишется и потом возвращается.
Или у Вас другая логика на этот счет? ;-)
...
Рейтинг: 0 / 0
MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
    #39646458
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

Пасибки, а вот это скорее всего и есть причина. Соединение с базой создает Yii2 .. скорее всего так оно и есть, ща проверю. Не подумал за этот момент.

Чего передаю в БД - это в чистом виде строка из второго сообщения. Пробовал над этой строкой выполнить html_entity_decode() перед записью в БД тоже. На второй вариант вылазит эта ошибка 1366. На первый вроде тоже, но уже не уверен, перепроверю.

Таблица примитивна: имеет первичный автоинкрементный ключик и текстовое поле в кодировке utf8mb4.

Код конечно же на Yii2 с его ActiveRecord .. кстати надо попробовать запихать в тбл прямым кодом, не делал... за ночь родилось предположение что Yii2 пытается самостоятельно что-то наворотить со строкой, хотя его никто и не просит. Проверю.
...
Рейтинг: 0 / 0
MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
    #39646501
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

В общем, да Вы оказались правы. Соединение с базой осталось в utf8, тему можно закрывать.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDb ошибка 1366 неверная кодировка строки при записи в БД .. и?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]