Bonjour à tous,

J'ai un souci dans la récupération de chaîne de caractère en UTF8 via Java. Je sais que c'est un souci récurent sur les forums mais j'ai déjà essayé tellement de choses sans succès que je fais appel à vous pour savoir quelle bétise j'ai fais.

Lorsque j'interroge via le client mysql, tout est OK.

Voici les variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
mysql> show variables where variable_name like 'collation%' or variable_name like 'char%';
 
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | latin1_swedish_ci          |
| collation_database       | utf8_unicode_ci            |
| collation_server         | latin1_swedish_ci          |
Voici le résulat (le forum n'affiche pas non plus les caractères...mais ils s'affiche correctement chez moi) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
mysql > select name from mytable;
 
| ÁRPÁD-AGRÁR Termelő, Kereskedelmi és Szolgáltató Zártkörű Részvénytársaság  
| Экспериментально-консервный завод
Lorsque j'effectue les mêmes requêtes via un programme Java :

Voici les variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
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/share/mysql/charsets/
collation_connection : utf8_general_ci
collation_database : utf8_unicode_ci
collation_server : latin1_swedish_ci
Voici le résultat (il ne s'affiche pas correctement) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
�RP�D-AGR�R Termelő, Kereskedelmi és Szolgáltató Zártkörű Részvénytársaság
ТÐ*ИДЕÐ�ТÐ� Ð�ГÐ*О
Voici mon code java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
public class UTF8Test {
 
    public static void main (String[]args) {
 
		java.sql.Connection conn = null;
		try {
 
			PrintStream sysout = new PrintStream(System.out, true, "UTF-8");
 
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			String jdbc = "jdbc:mysql://localhost/mydatabase?user=root";
			String jdbcutf8 = "&useUnicode=true&characterEncoding=UTF-8";
			conn = DriverManager.getConnection(jdbc+jdbcutf8);
 
			String utf8 = "SET NAMES 'UTF8'";
			String show = "show variables where variable_name like 'collation%' or variable_name like 'char%';";
			String sql = "SELECT name AS name FROM mytable";
 
			Statement st = conn.createStatement();
			st.execute(utf8);
			ResultSet rs = st.executeQuery(show);
			while(rs.next()) { 
				sysout.print(new String(rs.getBytes(1), "UTF-8")+" : ");
				sysout.println(new String(rs.getBytes(2), "UTF-8"));
			}
			sysout.println();
 
			rs = st.executeQuery(sql);
 
 
			while(rs.next()) { 
				sysout.println(new String(rs.getBytes("name"), "UTF-8"));
			}
 
			conn.close();
 
		}
		catch(Throwable t) {
			t.printStackTrace();
		}
 
 
	}
}
Ma question général : pourquoi ça marche avec le client mysql alors que les variables indique pas mal de latin1 alors qu'en java ca ne fonctionne pas alors que presque tout est en utf8 ? (jai bien entendu testé avec les mêmes configs niveau variable en java)

Je fais le tous en mode console en local. Voici les différentes propriétés :

Java : jdk 1.6
driver : mysql-connector-java-5.0.8.jar

D'avance merci pour vos retours.