2010-11-22 5 views
3

J'ai un petit problème, je construis une base de données à partir de fichiers CSV en utilisant une application Java connectée à la base de données mySQL.INSERT spécifique charset avec Java + mySQL de CSV

CSV est codé ISO-8859-1. Il est lu via un lecteur de fichiers tamponné et analysé avec les méthodes String. Ensuite, les chaînes sont introduites dans mySQL via le pilote JDBC.

Problème: les accents (c'est une application française) sont perdus dans le transfert. Dans la base de données mySQL, ils sont dans un format non identifié qui n'est pas UTF-8 ni Latin-1 ...

Mon hypothèse est que les chaînes sont codées bizarrement et gardent cet encodage lorsqu'elles sont réinsérées. Comment puis-je appliquer le jeu de caractères pour une instruction INSERT en Java?

Répondre

4

Vous devez vous assurer que vous avez lu le CSV en utilisant InputStreamReader avec le jeu de caractères approprié (qui est celui du fichier lui-même, qui est dans ce cas particulier ISO-8859-1).

BufferedReader reader = new BufferedReader(new InputStreamReader(input, "ISO-8859-1")); 

Vous devez également vous assurer que la chaîne de connexion JDBC contient un paramètre characterEncoding avec le jeu de caractères approprié (qui est celle de la table est été créée avec, que vous avez encore à comprendre sur la base de données MySQL). S'il semble être un jeu de caractères Unicode, vous devez également ajouter le paramètre useUnicode=true.

String url = "jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8&useUnicode=true"; 

Votre prochaine question sera probablement Comment puis-je savoir quel charset ma table de DB utilise?. Vous pouvez le faire en utilisant la commande SHOW. Il contiendra des informations sur le jeu de caractères.

SHOW CREATE DATABASE dbname; -- shows CREATE DATABASE statement. 
SHOW CREATE TABLE dbname.tblname; -- shows CREATE TABLE statement. 

Cela dit, sans rapport avec le problème, savez-vous que MySQL propose des installations d'importation CSV et que vous builtin donc pas nécessairement besoin de Java/JDBC pour cela? Commander le LOAD DATA INFILE command. Vous pouvez spécifier le jeu de caractères du fichier CSV comme argument de commande et MySQL s'inquiétera de la conversion correcte elle-même.

+0

Merci beaucoup, résolu !! –

+0

De rien. – BalusC