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.
C'est JDBC, pas JPA, qui détermine l'encodage:
jdbc:mysql://localhost:3306/administer?characterEncoding=utf8
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
La nouvelle version du pilote JDBC détecte automatiquement le caractère Encodage. Vous n'avez pas besoin de le définir explicitement.
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.