#mysql #json #spring-boot #jpa #objectmapper
#mysql #json #весенняя загрузка #jpa #objectmapper
Вопрос:
У меня проблема с типом данных JSON в MySQL. В этом столбце я записываю значения, основанные на словенских буквах.
Вот пример, который написан с использованием ObjectMapper:
{ "formState": [{"label": "Zaduženi", "value": "Test 1"}, {"label": "Tip", "value": "Fizičko"}] }
Я использую JPA для извлечения данных из базы данных MySQL, и в полезной нагрузке я получаю что-то вроде этого:
{ "formState": [{"label": "Zaduženi", "value": "Test 1"}] }
Тип данных Java, который я использую для представления этого JSON, — Map (HashMap).
URL-адрес источника данных: jdbc:mysql://localhost:3306/test_db?useUnicode=trueamp;characterEncoding=utf8amp;useSSL=false
Может кто-нибудь помочь мне с этой проблемой?
Заранее благодарю вас.
Комментарии:
1. Где-то UTF8 обрабатывается как ASCII. Вы должны проверить и убедиться, что в вашей базе данных, таблице и полях используется
utf8mb4
набор символов. Этот конкретный способ искажения этой буквы, похоже, отсутствует на стороне Java.2. @coladict моя база данных создается с помощью этой команды: CREATE DATABASE test_db CHARSET utf8 COLLATE utf8_slovenian_ci;
3. @coladict изменение набора символов с utf8 на utf8mb4 в конкретной таблице не помогает.
4. Затем вам нужно проверить с помощью консоли, правильно ли он сохранен или искажен. Это поможет вам сузить источник проблемы. Следующее, что я хотел бы попробовать после этого, — отладить приложение. Включите точку останова в драйвере JDBC
setString(int, String)
,getString(int)
функцию execute и отключите их, затем поместите ее в запрос в вашем коде, затем включите их в драйвере. Вы должны видеть во время выполнения, что делается с переменной на каком этапе.5. @coladict когда я меняю JSON на ТЕКСТ, он работает отлично. Но мне нужно, чтобы этот столбец был типа JSON.
Ответ №1:
Это может быть проблемой в структуре типов гибернации. Попробуйте воспроизвести его, используя любой из существующих тестовых примеров, и отправьте мне запрос на извлечение, чтобы я мог найти проблему.