2010-06-14 3 views
19

J'ai une application Web Java tournant sur GlassFish 3 et JPA (EclipseLink) sur MySQL. Le problème auquel je suis confronté est que si je sauvegarde des entités dans la base de données avec la méthode update(), les champs String perdent leur intégrité; '?' est affiché à la place de certains caractères.Codage de caractères JDBC

Le serveur, les pages et la base de données sont configurés pour utiliser UTF-8. Après la publication de données de formulaire, la page suivante affiche correctement les données. En outre, il semble "dans le débogage NetBeans que la propriété String de l'entité courante stocke également la valeur correcte. Dunno si le débogage NetBeans peut être approuvé; peut-être qu'il décode correctement, mais il est incorrect.

+3

Quelle est la base de données et quelle chaîne de connexion utilisez-vous? –

+0

J'utilise MySQL et la chaîne de connexion est: 'jdbc: mysql: // localhost: 3306/administr'' –

+0

Un lien pour ceux qui cherchent à utiliser utf8mb4: http://dev.mysql.com/doc/connector -j/fr/connector-j-reference-charsets.html –

Répondre

43

Il est JDBC, pas JPA que détermine le codage:

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

+1 Merci beaucoup très utile :) –

+1

Juste un sidenote pour ceux qui rencontrent le même problème: si vous voulez enchaîner les paramètres dans l'URL JDBC dans votre 'persistance .xml', vous devez réécrire '&' en tant que '&'. Exemple: 'jdbc: mysql: // localhost: 3306/administrer? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Pour les versions plus récentes du pilote jdbc (> = 5.1.13), ne spécifiez pas" characterEncoding ". Jetez un oeil: http://stackoverflow.com/a/18059663/967062 –

11

Je l'ai résolu ce qui suit: je GlassFish l'interface admin pour ajouter cette propriété aux paramètres de mon pool de connexion:

CharacterEncoding = UTF-8

0

je devais ajouter useUnicode = true aussi bien, donc je devais concaténer les paramètres avec '& 'il ressemble à ceci:

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

Si vous utilisez des profils Maven pour définir l'URL MySQL, comme moi, assurez-vous que vous mettez à la place && parce maven unescape l'url lors de l'écriture du fichier persistence.xml au dossier des classes.

1

Nouvelle version Le pilote JDBC détecte automatiquement le caractèreEncoding. Vous n'avez pas besoin de le définir explicitement.