2010-03-28 2 views
0

Voici mon scénario. J'enregistre un tas de chaînes contenant des caractères asiatiques dans MySQL en utilisant Hibernate. Ces chaînes sont écrites dans des colonnes varbinary. Tout fonctionne bien pendant l'opération de sauvegarde. Le DB contient les valeurs correctes (séquence d'octets). Si je demande (à nouveau en utilisant Hibernate) pour les chaînes que j'ai sauvegardées, j'obtiens les bons résultats. Mais quand Hibernate remplit l'entité à laquelle appartiennent les chaînes avec les valeurs du DB, j'obtiens des valeurs différentes de celles que j'ai utilisées dans la requête qui les a récupérées. Au lieu de recevoir les valeurs correctes, je reçois un tas de caractères de remplacement FFFD. Par exemple: si je stocke "하늘" dans la base de données, puis que je l'interroge, la chaîne résultante sera \ uFFFD \ uFFFD \ uFFFD \ uFFFD \ uFFFD \ uFFFD.Problème lors de la récupération de chaînes à partir de colonnes varbinary à l'aide de HIbernate et MySQL

  • la connexion DB a les paramètres suivants sont définis useUnicode = true & CharacterEncoding = UTF-8,
  • J'ai essayé d'utiliser les configurations suivantes pour Hibernate, mais cela n'a pas résolu le problème:
    - connection.useUnicode = true
    - connection.characterEncoding = UTF-8

    Par ailleurs, tout fonctionne correctement si les colonnes MySQL sont de type varchar. Qu'est-ce qui me manque? Aucune suggestion? Merci

+0

Pourquoi avez-vous besoin varbinary? –

+0

J'ai besoin de varbinary car je dois stocker des chaînes UTF-8 de 4 octets que MySQL ne supporte pas actuellement. Avant j'ai utilisé varchar et j'ai eu des exceptions en essayant de stocker ces 4 octets UTF-8 Strings. – Florin

Répondre

0

Définir le caractère de jeu de connexion à être binaire aussi:

SET NAMES 'binary'; 
Questions connexes