wake-up-neo.com

JDBC-Zeichenkodierung

Ich habe eine Java-Webanwendung, die unter GlassFish 3 und JPA (EclipseLink) unter MySQL ausgeführt wird. Das Problem, mit dem ich konfrontiert bin, ist, dass, wenn ich Entitäten in der Datenbank mit der update()-Methode speichere, String-Felder die Integrität verlieren; '?' wird anstelle einiger Zeichen angezeigt.

Der Server, die Seiten und die Datenbank sind für die Verwendung von UTF-8 konfiguriert.

Nachdem ich die Formulardaten gepostet habe, werden auf der nächsten Seite die Daten korrekt angezeigt. Außerdem scheint es in NetBeans-Debugger "zu sein", dass die String-Eigenschaft der aktuellen Entität den korrekten Wert speichert. Keine Ahnung, ob das Debuggen von NetBeans vertrauenswürdig ist. Es könnte sein, dass es korrekt decodiert, aber es ist falsch.

22
Daniel Szalay

Es ist JDBC, nicht JPA, die die Kodierung bestimmt:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
49
Bozho

Ich habe es folgendermaßen gelöst: Ich habe die GlassFish-Administrationsoberfläche verwendet, um diese Eigenschaft zu den Einstellungen meines Verbindungspools hinzuzufügen:

characterEncoding = UTF-8

12
Daniel Szalay

Neuer JDBC-Treiber der Version erkennt die Zeichenkodierung automatisch. .__ Sie müssen es nicht explizit festlegen.

3
fjjiaboming

Ich musste auch useUnicode = true hinzufügen, also musste ich die Parameter mit '&' zusammenfassen, so dass es so aussieht:

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

Wenn Sie wie bei mir Maven-Profile zum Festlegen der MySQL-URL verwenden, stellen Sie sicher, dass Sie & statt & eingeben, da maven die URL beim Schreiben der persistence.xml-Datei in den Klassenordner nicht dekodiert.

0
bentzy