Тип данных MySQL JSON / проблема с кодировкой JPA

#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:

Это может быть проблемой в структуре типов гибернации. Попробуйте воспроизвести его, используя любой из существующих тестовых примеров, и отправьте мне запрос на извлечение, чтобы я мог найти проблему.