私が使う spring-data-jpa
およびmysql
データベース。私のテーブルの文字セットはutf-8です。また、?useUnicode=yes&characterEncoding=utf8
application.propertiesファイルのmysql urlへ。 「ąčsave」などの文字をコントローラーに渡して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 |
+---------------+--------------------+
試してみる
spring.datasource.url = jdbc:mysql://localhost:3306/gehive?useUnicode=yes&characterEncoding=UTF-8
問題は「-」の欠落によるものと思われます。
リファレンス:- https://forum.hibernate.org/viewtopic.php?f=1&t=1037497&view=next
私は同じ問題を抱えていたので、この行をapplication.properties
ファイル:
spring.datasource.Tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;
注:次のなかった動作:
spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;
JDBC URLにパラメーターを直接追加したくないHikariCP接続プールを使用しているユーザーの場合:
spring.datasource.connectionProperties
プロパティは少し前に削除されました。それ以来、@ SebTheGreatの答えに示されているように、接続プール固有のプロパティを使用する必要があります:spring.datasource.Tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;
ヒカリにはconnection-properties
プロパティがありませんが、これは機能します:
spring.datasource.hikari.data-source-properties.useUnicode=true
spring.datasource.hikari.data-source-properties.characterEncoding=UTF-8
以下のように、特殊文字をエスケープすることを忘れないでください:spring.datasource.url=jdbc\:mysql\://localhost\:3306/${SERVER_DB_NAME}\?useUnicode=true\&characterEncoding=utf\-8\&characterSetResults=utf\-8
私の場合、それは私の問題を解決します 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