web-dev-qa-db-fra.com

Encodage de caractères JDBC

J'ai une application Web Java s'exécutant 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.

Le serveur, les pages et la base de données sont configurés pour utiliser UTF-8.

Après avoir posté les données de formulaire, la page suivante affiche les données correctement. En outre, il semble "dans le débogage NetBeans" que la propriété String de l'entité actuelle stocke également la valeur correcte. Ne sais pas si le débogage NetBeans peut être approuvé; peut-être qu'il décode correctement, mais il est incorrect.

22
Daniel Szalay

C'est JDBC, pas JPA, qui détermine l'encodage:

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

J'ai résolu le problème avec les éléments suivants: J'ai utilisé l'interface d'administration GlassFish pour ajouter cette propriété aux paramètres de mon pool de connexions:

characterEncoding = UTF-8

12
Daniel Szalay

La nouvelle version du pilote JDBC détecte automatiquement le caractère Encodage. Vous n'avez pas besoin de le définir explicitement.

3
fjjiaboming

Je devais aussi ajouter useUnicode = true, je devais donc concaténer les paramètres avec '&' pour que cela 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, assurez-vous, comme moi, de mettre & à la place de & car maven décompresse l'URL lors de l'écriture du fichier persistence.xml dans le dossier classes.

0
bentzy