web-dev-qa-db-fra.com

codage jpa utf-8 de données de printemps ne fonctionne pas

J'utilise spring-data-jpa et mysql base de données. Le jeu de caractères de mes tables est utf-8. J'ai aussi ajouté ?useUnicode=yes&characterEncoding=utf8 à l'url mysql dans le fichier application.properties. Problème lorsque je passe des caractères comme "ąčęėį" au contrôleur pour l'enregistrer dans mysql. Dans mysql j'ai eu ??? Des marques. Mais quand j'utilise l'exemple de console mysql update projects_data set data="ąęąčę" where id = 1; tout fonctionne bien.

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

les tables:

+---------------+--------------------+
| TABLE_NAME    | character_set_name |
+---------------+--------------------+           
| customer      | utf8               |
| projects      | utf8               |
| projects_data | utf8               |
+---------------+--------------------+
14
Edgaras Karka

Essayer

spring.datasource.url = jdbc:mysql://localhost:3306/gehive?useUnicode=yes&characterEncoding=UTF-8

Il semble que le problème soit dû à l'absence de "-".

Référence: - https://forum.hibernate.org/viewtopic.php?f=1&t=1037497&view=next

33
Naruto

J'ai eu les mêmes problèmes, et je l'ai résolu en ajoutant cette ligne à mon application.properties fichier:

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

Remarque: Les éléments suivants ne l'ont pas fonctionnent:

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

Pour toute personne utilisant le pool de connexions HikariCP qui préfère ne pas ajouter les paramètres directement à l'URL JDBC:

Le spring.datasource.connectionProperties la propriété a été supprimée il y a quelque temps. Depuis lors, vous devez utiliser les propriétés spécifiques du pool de connexions, comme indiqué dans la réponse de @ SebTheGreat: spring.datasource.Tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;

Hikari n'a pas de connection-properties propriété, mais cela fonctionne:

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

N'oubliez pas d'échapper les caractères spéciaux, comme ci-dessous: spring.datasource.url=jdbc\:mysql\://localhost\:3306/${SERVER_DB_NAME}\?useUnicode=true\&characterEncoding=utf\-8\&characterSetResults=utf\-8

2
vijay

Dans mon cas, cela résout mon problème 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
1
hugo blanc