2010-06-14 15 views
19

Possiedo un'applicazione Web Java in esecuzione su GlassFish 3 e JPA (EclipseLink) su MySQL. Il problema che sto affrontando è che se sto salvando le entità nel database con il metodo update(), i campi String perdono integrità; '?' viene visualizzato al posto di alcuni caratteri.Codifica caratteri JDBC

Il server, le pagine e il database sono configurati per utilizzare UTF-8.

Dopo aver inserito i dati del modulo, la pagina successiva mostra i dati correttamente. Inoltre "sembra" nel debug di NetBeans che la proprietà String dell'entità corrente memorizzi anche il valore corretto. Non so se il debug di NetBeans può essere considerato affidabile; potrebbe essere che decodifica correttamente, tuttavia non è corretto.

+3

Qual è il database e quale stringa di connessione stai usando? –

+0

Sto usando MySQL e la stringa di connessione è: 'jdbc: mysql: // localhost: 3306/administration' –

+0

Un collegamento per coloro che stanno cercando di utilizzare utf8mb4: http://dev.mysql.com/doc/connector -j/it/connector-j-reference-charsets.html –

risposta

43

E 'JDBC, non JPA che determina la codifica:

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

+1 Grazie mille utile :) –

+1

Solo un sidenote per chi incontra lo stesso problema: se vuoi concatenare i parametri nell'URL JDBC nella tua 'persistence ' .xml', devi riscrivere '&' come '&'. Esempio: 'jdbc: mysql: // localhost: 3306/administration? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Per le versioni più recenti di driver jdbc (> = 5.1.13), non specificare" characterEncoding ". Dai un'occhiata: http://stackoverflow.com/a/18059663/967062 –

11

ho risolto con il seguente: ho usato l'interfaccia di amministrazione GlassFish per aggiungere questa proprietà per le impostazioni del mio pool di connessioni:

characterEncoding = UTF-8

0

ho dovuto aggiungere useUnicode = true pure, così ho dovuto concat i parametri con '& 'in modo che assomiglia a questo:

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

Se stai usando i profili Maven per impostare l'URL di MySQL, come me, assicuratevi di mettere & invece & perché esperto di unescape l'URL quando si scrive il file persistence.xml alla cartella delle classi.

1

Nuova versione Il driver JDBC rileva automaticamente CharacterEncoding. Non è necessario impostarlo in modo esplicito.

Problemi correlati