J'ai eu des problèmes pour connecter une application Grails à une base de données MySQL hébergée sur le serveur RDS d'Amazon. Cela fonctionnait bien, je me suis rendu compte que les utilisateurs en Russie entraient des caractères cyrilliques dans ma forme, ce qui a entraîné la base de données MySQL montrant les données comme ????????.Connexion à la base de données MySQL UTF-8 avec Grails
Donc, j'ai converted the data in the database from Latin1 to UTF-8. (pourquoi oh pourquoi n'est pas UTF-8 par défaut?)
J'ai ajouté "? UseUnicode = yes & CharacterEncoding = UTF-8" à la fin de mon JDBC chaîne de connexion:
jdbc:mysql://myserver.amazonaws.com/mydatabase?useUnicode=yes&characterEncoding=UTF-8
maintenant, quand Grails se connecte à ma base de données, je reçois l'erreur
java.io.StreamCorruptedException: en-tête de flux incorrect: C2ACC3AD à JAV a.io.ObjectInputStream.readStreamHeader (ObjectInputStream.java:800) à java.io.ObjectInputStream. (ObjectInputStream.java:297)
Une possibilité que je l'ai vu décrit comme une résolution à cette avec d'autres La structure de la base de données consiste à exécuter la connexion à la base de données
SET NAMES UTF8
Immédiatement après la connexion à la base de données. Cependant, je ne sais pas comment forcer Grails à faire cela, parce que Grails gère son processus de connexion de base de données sous le capot. Des idées?
L'URL JDBC mise à jour devrait être tout ce dont vous avez besoin. Il semble suspicieux que certaines données ont été sérialisées en tant qu'objet dans la base de données à un moment donné, et que ces données ne sont plus valides. Cette exception se produit-elle uniquement pour les requêtes sur une certaine classe de domaine? –
OUI. C'était ça. J'avais une classe de domaine qui stockait un peu de méta-données comme une carte de hachage sérialisée. Une fois que j'ai défini toute la colonne de données sur null, le problème a été résolu. Maintenant, je viens de comprendre comment repousser ces métadonnées avec quelque chose de mieux ... Merci! –
Veuillez répondre à votre propre question, puis l'arrêter en indiquant "non traité". – Danack