Проблема с получением специальных символов sql вставленных объектов из MySQL с использованием приложения Spring Boot - PullRequest
0 голосов
/ 08 марта 2020

Я создал базу данных MySQL из скрипта вместе со вставкой строк данных, содержащих специальные символы, такие как č, š и ž. По этой причине я устанавливаю набор символов по умолчанию для схемы в сценарии:

CREATE SCHEMA IF NOT EXISTS schemaname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;

Теперь, если я go - MySQL консоль, и пытаюсь извлечь данные из таблицы с помощью следующих специальных символов:

SELECT name FROM tablename;

Я получу ответ со следующими специальными символами:

+-------------------------------------------------+
| name                                            |
+-------------------------------------------------+
| Test of š, and č, and ž                         |
+-------------------------------------------------+

Я также создал приложение Spring Boot (в спящем режиме с Spring Boot Starter Data JPA), в котором я реализовал API остальных для сущности, которые есть в моей базе данных.

Проблема возникает, когда я пытаюсь извлечь (ранее вставленные) сущности, используя JPARepository (EntityRepository.findAll ()). Вместо правильно написанных специальных символов, которые являются нормальными в MySQL консоли, я получаю:

Å¡, ž и такие символы (должно быть š, ž)

Однако, если я сохраню новый Если вы используете API Rest со специальными символами и извлекаете его, то со специальными символами все в порядке (š, ž).

Любая идея о том, почему существует разница между ними и как я могу решить проблема? Без необходимости вставлять каждую сущность через Rest API вместо MySQL вставок.

Мой файл application.properties содержит (я не думаю, что проблема здесь, так как сущности созданы через API остальных все в порядке):

spring.datasource.url=jdbc:mysql://localhost:3306/schemaname?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8

Может быть проблема:. sql файлы были созданы на Windows, но я использую sql сервер (в docker) и мое приложение на Linux (все. sql файлы имеют кодировку UTF-8).

1 Ответ

0 голосов
/ 09 марта 2020

Решение, которое я нашел, было на самом деле очень простым, не могу поверить, что пропустил это.

Мне просто нужно было поставить N перед каждой строкой со специальным символом в файле. sql. Пример:

INSERT INTO X(FIELD1) VALUE (N'ščž');

Просто означает, что я передаю значение NCHAR / NVARCHAR / NTEXT вместо обычного CHAR / VARCHAR / TEXT.

...