2011-11-19 6 views
3

J'ai un serveur MySQL avec les paramètres suivants:mysql encodage de caractères

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 

J'ai un client Java qui se connecte à cette base de données en utilisant DBCP avec cette config:

<bean id="dsJoomla" class="hu.eutrust.wsfresh.CustomDataSource"> 
     <property name="driverClassName" value="${joomla.db.driver}"/> 
     <property name="username" value="${joomla.db.user}"/> 
     <property name="password" value="${joomla.db.pass}"/> 
     <property name="url" value="${joomla.db.url}"/> 
     <property name="connectionProperties" value="characterEncoding=UTF-8;useUnicode=true;"/> 
    </bean> 

Puis-je effectuer quelque part dans le code une mise à jour comme celui-ci:

template.update("insert into test (nev) values (:nev)", new MapSqlParameterSource("nev", "Árvíztűrő")); 

Après avoir vérifié les résultats dans phpMyAdmin je vois une ligne:

ID NEV 
2 Árvízt?r? 

Les caractères ő et that qui ne sont pas dans l'ensemble latin1 sont mauvais. Je suppose que c'est parce que le character_set_server est latin1. Mais en utilisant phpMyAdmin je peux éditer manuellement l'enregistrement et entrer 'Árvíztűrő' et après que l'enregistrement est correct. Donc, je suppose qu'il est possible d'entrer la valeur désirée dans la base de données avec ces paramètres. Comment puis-je le faire avec mon client Java? Comment dois-je configurer la connexion? Pourquoi mes caractères ő et go se trompent-ils si la connexion est 100% utf8?

show create table test de sortie est:

CREATE TABLE `test` (
`ID` int(11) NOT NULL AUTO_INCREMENT, 
`NEV` varchar(64) NOT NULL, 
PRIMARY KEY (`ID`) 
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

show créer la base de données de sortie joomla est:

CREATE DATABASE `joomla` /*!40100 DEFAULT CHARACTER SET utf8 */ 
+0

veuillez fournir la sortie de 'show create test de table;' et 'show create database ;'. – Lars

+0

selon http://commons.apache.org/dbcp/configuration.html le 'connectionProperties' doit être séparé avec; – jabal

+0

mis à jour la question avec le «show» requis – jabal

Répondre

1

Les propriétés de connexion définies via le bean de pool de connexions DBCP n'ont pas été traitées comme les ajoutant à l'URL JDBC.

Donc, enfin l'ajout de ?characterEncoding=UTF-8&useUnicode=true à la connexion url m'a aidé.

-1

Si vous utilisez Eclipe, avez-vous vérifié votre encodage:

  • Fenêtre -> Préférence -> Général -> espace de travail
  • right c lick au projet -> propriété -> ressource

en le changeant en UTF-8 peut aider.

Bonne chance!

+0

Je suis assez sûr que le problème n'a rien à voir avec l'encodage de mon code Java .. – jabal

+0

Avez-vous vérifié cela? Vous pouvez voir 'Árvíztűrő' correctement dans votre éclipse (parce que vous utilisez simplement un encodage supportant ces caractères) mais cela peut ne pas correspondre à votre chaîne de connexion url qui est "characterEncoding = UTF-8; useUnicode = true;" –

+0

Avant la mise à jour SQL j'ai répercuté la chaîne dans la console, pour vérifier les choses. Deuxièmement: le programme utilise également une base de données différente et il n'y a aucun problème avec les caractères sur cette connexion. – jabal