2010-06-14 19 views
19

Tengo una aplicación web Java ejecutándose en GlassFish 3 y JPA (EclipseLink) en MySQL. El problema que estoy enfrentando es que si guardo entidades en la base de datos con el método update(), los campos String pierden integridad; '?' se muestra en lugar de algunos caracteres.Codificación de caracteres JDBC

El servidor, las páginas y la base de datos están configurados para usar UTF-8.

Después de publicar los datos del formulario, la página siguiente muestra los datos correctamente. Además, "parece" en la depuración de NetBeans que la propiedad String de la entidad actual también almacena el valor correcto. No sé si se puede confiar en la depuración de NetBeans; podría ser que se decodifica correctamente, sin embargo es incorrecto.

+3

¿Cuál es la base de datos y qué cadena de conexión está utilizando? –

+0

Estoy usando MySQL y la cadena de conexión es: 'jdbc: mysql: // localhost: 3306/administer' –

+0

Un enlace para aquellos que buscan utilizar utf8mb4: http://dev.mysql.com/doc/connector -j/en/connector-j-reference-charsets.html –

Respuesta

43

Es JDBC, no JPA que determina la codificación:

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

+1 Muchas gracias :) –

+1

Sólo una nota al margen para aquellos que se encuentran con el mismo problema: si quieres encadenar parámetros en la url JDBC en tu 'persistencia .xml', debe volver a escribir '&' como '&'. Ejemplo: 'jdbc: mysql: // localhost: 3306/administer? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Para las versiones más recientes del controlador jdbc (> = 5.1.13), no especifique" characterEncoding ". Eche un vistazo: http://stackoverflow.com/a/18059663/967062 –

11

Lo resuelto con lo siguiente: He utilizado la interfaz de administración de GlassFish añadir esta propiedad a la configuración de mi grupo de conexión:

characterEncoding = UTF-8

0

he tenido que añadir useUnicode = true, así, por lo que tuvo que concat los parámetros con '& 'por lo que se ve así:

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

Si está utilizando perfiles de Maven para establecer la dirección URL de MySQL, como yo, asegúrese de poner en su lugar && porque experto unescape la url al escribir el archivo persistence.xml a la carpeta de clases.

1

Nueva versión El controlador JDBC detecta automáticamente el characterEncoding. No necesita configurarlo explícitamente.

Cuestiones relacionadas