OVH Cloud OVH Cloud

Problème JDBC et euro ...

3 réponses
Avatar
Canard Furieux
Salut,

J'essaye de faire un simple insert en base mais le driver jdbc semble me
virer mes caractères hors iso-8859-1.

Pourtant avec Properties je lui demande d'utiliser le 8859-15 qui accepte le
caractère l'euro et l'o.
Quand je fais la requête depuis MySQL Control center ca marche, via JDBC ca
marche pas...

J'utilise mysql connector 3.0.11 comme driver.

update foo set data = "une ouvre de 10 000 ? \u20AC";
Dans le champ j'ai alors "une ?uvre de 10 000 ? ? "

Quelqu'un a une idée ?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class foo {
private Connection cMySQL = null;
private Statement stmt = null;
public void connexionMySQL() {
try {
String dbURI = "jdbc:mysql://127.0.0.1/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "iso-8859-15");
prop.put("user", "root");
prop.put("password", "******");
cMySQL = DriverManager.getConnection(dbURI, prop);
stmt = cMySQL.createStatement();
} catch (Exception ex) {
System.out.println(ex);
}
}
public void closeMySQL() {
try {
cMySQL.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
public foo() {
connexionMySQL();
try {
PreparedStatement pQuery = null;
pQuery = cMySQL.prepareStatement("update test.foo set "
+ "data = 'une ouvre de 10 000 ? \u20AC ' ");
System.out.println(pQuery.toString());
pQuery.executeUpdate();
} catch (Exception ex) {
System.out.println(ex);
}
closeMySQL();
}
public static void main(String args[]) {
new foo();
}
}

3 réponses

Avatar
jerome moliere
Canard Furieux wrote:

Salut,

J'essaye de faire un simple insert en base mais le driver jdbc semble me
virer mes caractères hors iso-8859-1.

Pourtant avec Properties je lui demande d'utiliser le 8859-15 qui accepte le
caractère l'euro et l'o.
Quand je fais la requête depuis MySQL Control center ca marche, via JDBC ca
marche pas...

J'utilise mysql connector 3.0.11 comme driver.

update foo set data = "une ouvre de 10 000 ? u20AC";
Dans le champ j'ai alors "une ?uvre de 10 000 ? ? "

Quelqu'un a une idée ?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class foo {
private Connection cMySQL = null;
private Statement stmt = null;
public void connexionMySQL() {
try {
String dbURI = "jdbc:mysql://127.0.0.1/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "iso-8859-15");


es tu sur de ce charSet ?
d'apres la doc en ligne sur le site mysql je crains que ce tag ait été
remplacé par qqch du genre:

characterEncoding If 'useUnicode' is set to true, what character
encoding should the driver use when dealing with strings? (defaults is
to 'autodetect') false

Jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
Yves Martin
jerome moliere writes:

String dbURI = "jdbc:mysql://127.0.0.1/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "iso-8859-15");


es tu sur de ce charSet ?
d'apres la doc en ligne sur le site mysql je crains que ce tag ait été
remplacé par qqch du genre:

characterEncoding If 'useUnicode' is set to true, what character
encoding should the driver use when dealing with strings? (defaults is
to 'autodetect') false


Si la propriété passée au driver JDBC n'est pas exploitée
correctement, tu peux définir l'encodage par défaut de la JVM (toutes
les entrées/sorties) juste pour ton essai avec
-Dfile.encoding=iso-8859-15

Mais c'est assez contraignant et pas du tout propre. Il serait mieux
de faire marcher correctement le driver.

--
Yves Martin


Avatar
Canard Furieux
"Yves Martin" a écrit...

es tu sur de ce charSet ?
d'apres la doc en ligne sur le site mysql je crains que ce tag ait été
remplacé par qqch du genre:



Non en fait en lisant le readme du driver jconnector ils disent qu'il faut
utiliser characterEncoding et useUnicode en effet.

Par contre pas moyen d'utiliser l'iso-8859-15 ( qui ne semble pas souvent
implémenté ), par contre le cp1252 marche et me permet d'avoir mes
caractères.

public void connexionMySQL() {
try {
String dbURI = "jdbc:mysql://127.0.0.1/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
Properties prop = new Properties();
//prop.put("characterEncoding", "ISO-8859-15");
prop.put("characterEncoding", "cp1252");
prop.put("useUnicode", "true");
prop.put("user", "root");
prop.put("password", "");
cMySQL = DriverManager.getConnection(dbURI, prop);
stmt = cMySQL.createStatement();
} catch (Exception ex) {
System.out.println(ex);
}
}