Des problèmes de lecture/écriture des données UTF-8 dans MySQL à partir de Java à l'aide de connecteur JDBC 5.1
J'ai un scénario avec deux bases de données MySQL (en UTF-8), un code Java (un Service du Minuteur) permettant de synchroniser deux bases de données (lecture de la forme première de l'écriture/mise à jour à la seconde) et une application Web qui permet de modifier les données chargées dans la deuxième base de données.
Tous les accès base de données est faite à l'aide de IBATIS (mais je découvre que j'ai le même problème à l'aide de JDBC, PreparedStatement
s et ResultSet
s)
Lors de mon code java lit les données à partir de la première base de données, j'obtiens des caractères comme 'ó'
quand vraiment il doit être 'ó'
. Ces données sont wroten sans modifications à la deuxième base de données.
Plus tard, quand je vois les données chargées dans mon application web, je vois le extrange caractère malgré la <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
.
Si je décoder les données à l'aide de ...
new String(data.getBytes("UTF-8"));
... Je visualise bien le caractère (-). Mais je ne peux pas utiliser cette solution comme une règle générale, car quand je modifie des données à l'aide de l'application web de formulaire, les données ne sont pas mis à jour en UTF-8 dans mon deuxième base de données (en dépit de la base de données est en UTF-8 et ma chaîne de connexion est à l'aide de characterEncoding, characterSetResults et useUnicode paramètres).
De mon code Java-je obtenir de la Base de données de paramètres:
character_set_client-->utf8
character_set_connection-->utf8
character_set_database-->utf8
character_set_filesystem-->binary
character_set_results-->utf8
character_set_server-->latin1
character_set_system-->utf8
character_sets_dir-->/usr/local/mysql51/share/mysql/charsets/
la character_set_server paramètre ne peut pas être changé et je ne sais pas ce que je fais de mal!!
Comment puis-je lire des données UTF-8 à partir de MySQL à l'aide de connecteur JDBC (mysql-connector-java-5.1.5-bin.jar
)?
Est le problème avec la lecture des données à partir de la première base de données ou de l'écriture à la deuxième base de données?
OriginalL'auteur | 2009-04-08
Vous devez vous connecter pour publier un commentaire.
Un peu de retard, mais cela vous aidera à:
OriginalL'auteur Doua Beri
Vous pouvez définir la
file.encoding
propriété de votre JVM de l'UTF-8, donc tous les paramètres régionaux/encodage sensibles API examinera décodé les Chaînes de caractères comme UTF8.Par exemple, vous pouvez définir dans votre ligne de commande qui lance votre application Java:
Vous pouvez aussi consulter cette SORTE de question pour une explication complète de Tomcat installation.
OriginalL'auteur chburd
À un certain point dans la chaîne, codé en UTF-8 octets sont décodés avec Latin1. À partir de la liste de vos paramètres, il apparaît que ce qui se passe à la "character_set_server". Sans savoir comment ces valeurs ont été obtenues, il est difficile de les interpréter.
Vérifier la valeur de la le système de la propriété de fichier".l'encodage". Si ce n'est pas "UTF-8", alors vous devez explicitement spécifier "UTF-8" comme le codage des caractères à chaque fois que vous décoder des octets de caractères. Par exemple, lorsque vous appelez une
String
constructeur avec unbyte[]
, ou l'utilisation d'unInputStreamReader
.Il est préférable de spécifier explicitement l'encodage des caractères, plutôt que de compter sur la plateforme par défaut l'encodage.
Désolé, je ne comprends pas votre commentaire.
OriginalL'auteur erickson