Spring данные jpa utf-8 кодирование не работает

Я использую базу данных spring-data-jpa и mysql. Мой набор символов таблиц - utf-8. Также я добавил ?useUnicode=yes&characterEncoding=utf8 в mysql url в файле application.properties. Проблема, когда я передаю символы, подобные "ąčęėį", контроллеру, чтобы сохранить его в mysql. В mysql я получил??? Метки. Но когда я использую пример консоли mysql update projects_data set data="ąęąčę" where id = 1;, все работает хорошо.

application.properties:

# "root" as username and password.
spring.datasource.url = jdbc:mysql://localhost:3306/gehive?useUnicode=yes&characterEncoding=utf8
spring.datasource.username = gehive
spring.datasource.password = pass

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

# Show or not log for each sql query
spring.jpa.show-sql = true

# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update

# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy


# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager)

# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

таблицы:

+---------------+--------------------+
| TABLE_NAME    | character_set_name |
+---------------+--------------------+           
| customer      | utf8               |
| projects      | utf8               |
| projects_data | utf8               |
+---------------+--------------------+

Ответ 2

У меня были те же проблемы, и я решил это, добавив эту строку в мой файл application.properties:

spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;

Примечание. Не работает следующее:

spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;

Ответ 3

Не забудьте избежать каких-либо специальных символов, как показано ниже:   spring.datasource.url=jdbc\:mysql\://localhost\:3306/${SERVER_DB_NAME}\?useUnicode=true\&characterEncoding=utf\-8\&characterSetResults=utf\-8

Ответ 4

В моем случае, чтобы решить мою проблему https://mathiasbynens.be/notes/mysql-utf8mb4

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Ответ 5

Для тех, кто использует пул соединений HikariCP, кто предпочитает не добавлять параметры непосредственно в URL JDBC:

Свойство spring.datasource.connectionProperties было удалено некоторое время назад. С тех пор вам нужно использовать специфические свойства пула соединений, как показано в ответе spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;: spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;

У Hikari нет connection-properties, но это работает:

spring.datasource.hikari.data-source-properties.useUnicode=true
spring.datasource.hikari.data-source-properties.characterEncoding=UTF-8