Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

spring data jpa utf-8 encoding not working

I use spring-data-jpa and mysql database. My tables character set is utf-8. Also I added ?useUnicode=yes&characterEncoding=utf8 to mysql url in application.properties file. Problem when I pass characters like "ąčęėį" to controller to save it in mysql. In mysql I got ??? marks. But when I use mysql console example update projects_data set data="ąęąčę" where id = 1; every works well.

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

tables:

+---------------+--------------------+
| TABLE_NAME    | character_set_name |
+---------------+--------------------+           
| customer      | utf8               |
| projects      | utf8               |
| projects_data | utf8               |
+---------------+--------------------+
like image 447
Edgaras Karka Avatar asked Jul 30 '16 19:07

Edgaras Karka


3 Answers

Try

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

It seems issue is due to missing "-".

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

like image 193
Naruto Avatar answered Nov 17 '22 07:11

Naruto


I had the same issues, and I solved it by adding this line to my application.properties file:

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

Note: The following didn't work:

spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;
like image 8
SebTheGreat Avatar answered Nov 17 '22 05:11

SebTheGreat


For anyone using the HikariCP connection pool who prefers not to append the parameters directly to the JDBC URL:

The spring.datasource.connectionProperties property was removed some time ago. Since then, you need to use connection pool specific properties as shown in @SebTheGreat's answer: spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;

Hikari doesn't have a connection-properties property, but this works:

spring.datasource.hikari.data-source-properties.useUnicode=true
spring.datasource.hikari.data-source-properties.characterEncoding=UTF-8
like image 6
Joel Avatar answered Nov 17 '22 05:11

Joel