25

I have a Java Web application running on GlassFish 3 and JPA (EclipseLink) on MySQL. The problem I'm facing is that if I'm saving entities to the database with the update() method, String fields lose integrity; '?' is shown instead of some characters.

The server, pages and database are configured to use UTF-8.

After I post form data, the next page shows the data correctly. Furthermore it "seems" in NetBeans debug that the String property of the current entity stores the correct value too. I don't know if NetBeans debug can be trusted; might be that it decodes correctly, however it's incorrect.

peterh
  • 1
  • 15
  • 76
  • 99
Daniel Szalay
  • 3,942
  • 12
  • 56
  • 100

4 Answers4

53

It's JDBC, not JPA that determines the encoding:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
Bozho
  • 572,413
  • 138
  • 1,043
  • 1,132
  • 4
    Just a sidenote for those who come across the same problem: if you want to chain parameters in the JDBC url in your `persistence.xml`, you have to rewrite `&` as `&`. Example: `jdbc:mysql://localhost:3306/administer?rewriteBatchedStatements=true&characterEncoding=UTF-8` – Daniel Szalay Aug 22 '14 at 21:02
  • For newer versions of jdbc driver (>= 5.1.13), do not specify "characterEncoding". Have a look: http://stackoverflow.com/a/18059663/967062 – Nitin Bansal Feb 07 '17 at 08:40
12

I solved it with the following: I used the GlassFish admin interface to add this property to my connection pool's settings:

characterEncoding = UTF-8

Daniel Szalay
  • 3,942
  • 12
  • 56
  • 100
5

New version JDBC driver auto detect the characterEncoding. You do not need to set it explicitly.

fjjiaboming
  • 193
  • 1
  • 3
  • 11
0

I had to add useUnicode=true as well, so I had to concat the parameters with '&' so it looks like this:

jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&characterEncoding=UTF-8

If you're using maven profiles to set the MySQL URL, like me, make sure you put & instead & because maven unescape the url when writing the persistence.xml file to classes folder.

bentzy
  • 1,234
  • 2
  • 14
  • 30