2010-06-14 16 views
19

Mam aplikację Java Web działającą na oprogramowaniu GlassFish 3 i JPA (EclipseLink) na MySQL. Problem, przed którym stoję, polega na tym, że jeśli zapisuję jednostki w bazie danych za pomocą metody update(), pola tracą integralność; '?' jest wyświetlany zamiast niektórych znaków.Kodowanie znaków JDBC

Serwer, strony i baza danych są skonfigurowane do używania UTF-8.

Po wysłaniu danych formularza następna strona wyświetla dane poprawnie. Ponadto "wydaje się" w debugowaniu NetBeans, że właściwość String bieżącego obiektu również przechowuje poprawną wartość. Dunno, jeśli debugowanie NetBeans może być zaufane; może być to, że dekoduje poprawnie, ale jest niepoprawny.

+3

Jaka jest baza danych i jakiego ciągu połączenia używasz? –

+0

używam MySQL i ciąg połączenia jest: 'jdbc: mysql: // localhost: 3306/administer' –

+0

Link dla tych, którzy chcą korzystać z utf8mb4: http://dev.mysql.com/doc/connector -j/pl/złącze-j-reference-charsets.html –

Odpowiedz

43

To JDBC, nie JPA że określa kodowanie:

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

+1 Dziękuję bardzo pomocny :) –

+1

Tylko sidenote dla tych, którzy natknąć się na ten sam problem: jeśli chcesz parametrów sieci w adresie URL JDBC w 'wytrwałości .xml', musisz przerobić '&' jako '&'. Przykład: 'jdbc: mysql: // localhost: 3306/administrowanie? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Dla nowszych wersji sterownika jdbc (> = 5.1.13), nie podawaj" characterEncoding ". Zobacz: http://stackoverflow.com/a/18059663/967062 –

11

Rozwiązałem go z następujących czynności: Użyłem administratora interfejs GlassFish, aby dodać ten obiekt do ustawień mojego puli połączeń za:

characterEncoding = UTF-8

0

musiałem dodać useUnicode = true, tak więc musiałem concat parametrów z "& ", więc wygląda to tak:

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

Jeśli używasz profili Maven ustawić URL MySQL, tak jak ja, upewnij się umieścić & zamiast & ponieważ Maven unescape url pisząc plik persistence.xml do folderu klas.

1

Nowa wersja sterownika JDBC automatycznego wykrywania characterEncoding. Nie trzeba jej ustawiać jawnie.

Powiązane problemy