2010-06-14 11 views
19

Ich habe eine Java-Webanwendung auf GlassFish 3 und JPA (EclipseLink) auf MySQL. Das Problem, dem ich gegenüberstehe, ist, dass, wenn ich Entitäten in der Datenbank mit der update() Methode speichern, String Felder Integrität verlieren; '?' wird anstelle einiger Zeichen angezeigt.JDBC-Zeichencodierung

Der Server, die Seiten und die Datenbank sind so konfiguriert, dass sie UTF-8 verwenden.

Nachdem ich Formulardaten post, zeigt die nächste Seite die Daten korrekt. Außerdem scheint es in NetBeans Debug zu sein, dass die String Eigenschaft der aktuellen Entität auch den korrekten Wert speichert. Weiß nicht ob NetBeans debuggt werden kann; könnte sein, dass es richtig dekodiert, aber es ist falsch.

+3

Was ist die Datenbank und welche Verbindungszeichenfolge verwenden Sie? –

+0

Ich benutze MySQL und die Verbindungszeichenfolge ist: 'jdbc: mysql: // localhost: 3306/administrieren' –

+0

Ein Link für diejenigen, die utf8mb4 verwenden möchten: http://dev.mysql.com/doc/connector -j/de/connector-j-reference-charsets.html –

Antwort

43

Es ist JDBC, nicht JPA, dass bestimmt die Codierung:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8 
+0

+1 Vielen Dank sehr hilfreich :) –

+1

Nur eine Randnotiz für diejenigen, die auf das gleiche Problem stoßen: Wenn Sie Parameter in der JDBC-URL in Ihrer Persistenz verketten wollen .xml', müssen Sie '&' als '&' neu schreiben. Beispiel: 'jdbc: mysql: // localhost: 3306/administrieren? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Für neuere Versionen des jdbc-Treibers (> = 5.1.13), geben Sie nicht" characterEncoding "an. Schau mal: http://Stackoverflow.com/a/18059663/967062 –

11

Ich löste es mit den folgenden: Früher habe ich die Glassfish Admin-Interface diese eigenschaft auf meine Verbindung Becken Einstellungen hinzuzufügen:

characteren = UTF-8

0

hatte ich useUnicode = true auch, hinzufügen, so hatte ich die Parameter verketten mit "& ", so dass es wie folgt aussieht:

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

Wenn Sie Maven Profile verwenden die MySQL-URL, wie ich zu setzen, stellen Sie sicher, dass Sie & statt & weil Maven unescape die URL setzen, wenn die persistence.xml Datei zu schreiben zum Klassenordner.

1

Neuer JDBC-Treiber der Version erkennt das characterEncoding automatisch. Sie müssen es nicht explizit festlegen.