Reputation: 518
I have java application through which I do different operations on MySQL DB. The probleam is that when inserting utf8 String it is not inserted correctly. The charset of DB is utf8
and I have set collation to utf8_unicode_ci
. Server connection collation is also utf8_unicode_ci
. Furthermore when I insert data from phpMyAdmin it is inserted correctly, but when I do it from Java application using JOOQ - it is not. Example:
Result<ExecutorsRecord> executorsRecord =
context.insertInto(EXECUTORS, EXECUTORS.ID, EXECUTORS.NAME, EXECUTORS.SURNAME, EXECUTORS.REGION, EXECUTORS.PHONE, EXECUTORS.POINTS, EXECUTORS.E_TYPE)
.values(id, name, surname, region, phone, 0, type)
.returning(EXECUTORS.ID)
.fetch();
where name = "Бобр"
and surname = "Добр"
, produces tuple with ???? as a name and ???? as surname. I have checked both strings, they are passed correctly to the method correctly.
Upvotes: 3
Views: 596
Reputation: 518
As @spencer7593 suggested the problem could be in JDBC connector. So I added into url
of connection following: ?characterEncoding=utf8
so that final url was "jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8"
, where mydb
is a name of database. This has sorted out my problem. Also I would like to add the following statement (again by @spencer7593):
When we've got things configured correctly, and things aren't working, our goto suspect is the JDBC driver. To get timezone differences between the JVM and the MySQL database sorted out, to prevent the JDBC driver from "helping" by doing an illogical combination of various operations, we had to add two extra obscurely documented settings to the connection string.
Further reading
Upvotes: 2