2011-01-06 7 views
1

J'essaie d'écrire un programme client simple Java qui utilise koi8r comme jeu de caractères, et continue d'échouer.MySql Jdbc Connector - problème de localisation

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn2 = DriverManager.getConnection ("jdbc:mysql://localhost:3306/test","root",null); 
Statement stmt = conn2.createStatement(); 
int result; 
result = stmt.executeUpdate("SET CHARACTER SET koi8r"); 

stmt = conn2.createStatement(); 
result = stmt.executeUpdate("DROP TABLE IF EXISTS װֱֱֲֳֹּ, t1, t2"); 
stmt.close(); 
assertEquals(0, result); 

Je reçois

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '???????, t1, t2' at line 1 

Quand je mets ces commandes dans un fichier de script et les exécuter en utilisant le client MySql il fonctionne très bien

SET CHARACTER SET koi8r 
DROP TABLE IF EXISTS װֱֱֲֳֹּ, t1, t2 

Je renifle le réseau et j'ai vu le connecteur jdbc l'envoie avec ?????? au serveur, donc je suppose que je manque un peu de réglage à la connexion. En fait, j'ai essayé (setEncoding, setCharactersEncoding, setConncetionCollation ...), mais j'ai quand même échoué.

+0

Salut, je ne connais pas beaucoup de koi8r mais ce lien peut aider. http://www.fileformat.info/info/charset/KOI8-R/index.htm – Ankit

Répondre

3

Vous devez indiquer au pilote JDBC l'encodage qu'il doit utiliser pour transférer les caractères sur le réseau. Il s'agit par défaut de codage par défaut de la plate-forme qui est dans votre cas apparemment pas UTF-8.

Vous pouvez le faire en ajoutant les deux paramètres de la requête suivante à l'URL JDBC:

jdbc:mysql://localhost:3306/test?useUnicode=yes&characterEncoding=UTF-8 

Voir aussi the documentation.