2009-11-23 8 views
2

J'ai une base de données en production où toutes mes tables utilisent l'encodage utf8/utf8_general_ci. Cela fonctionne essentiellement bien sauf dans un scénario.UTF8 - bizarrerie Hibernate/MySQL

Qu'est-ce qui se passe est-ce ??? sont retournés pour certains caractères (chinois, etc); Cependant, ils sont également retournés correctement pour la même table mais selon un critère différent.

J'ai vérifié les paramètres de connexion d'Hibernate à MySQL et ils ont le bon jeu de caractères.

Je n'arrive pas à comprendre comment cela peut se produire. Les critères qui renvoie les mauvais caractères est un simple findById:

Criteria criteria = getHibernateSession().createCriteria(CalendarEvent.class); 
criteria.add(Restrictions.eq("id", id)); 
return (CalendarEvent) criteria.uniqueResult(); 

Ce n'est que passe dans la production sous Solaris - Je ne peux pas reproduire localement.

+0

Eh bien, nous avons toujours le problème. Aucun de ces aide – wjp

Répondre

3

Dans votre connexion chaîne Avez-vous essayé

jdbc:mysql://localhost/dbname?characterEncoding=utf8

ou ajoutez le paramètre JVM -Dfile.encoding=utf-8 lors du démarrage de votre application/serveur

+0

ouais nous avons déjà – wjp

+0

vérifier ma mise à jour – Bozho

+0

merci Bozho, mais je ne vois pas comment l'encodage de fichiers VM a un effet sur hibernation (je vais essayer si) – wjp

2

Essayez de définir les propriétés suivantes dans votre fichier de configuration de mise en veille prolongée:

<property name="hibernate.connection.useUnicode">true</property> 
<property name="hibernate.connection.characterEncoding">UTF-8</property> 
<property name="hibernate.connection.charSet">UTF-8</property> 
+0

Hmm nous n'avons pas l'utilisationUnicode one (les autres que nous faisons). Je vais essayer. – wjp