2010-11-22 4 views
3

Ich habe ein kleines Problem, ich baue eine Datenbank aus CSV-Dateien mit einer Java-Anwendung mit der mySQL-Datenbank verbunden.INSERT spezifischen Zeichensatz mit Java + mySQL von CSV

CSV ist ISO-8859-1 codiert. Es wird über einen gepufferten Dateileser gelesen und mit String-Methoden analysiert. Dann werden die Strings über den JDBC-Treiber in mySQL eingeführt.

Problem ist: Akzente (das ist eine französische Anwendung) sind in der Übertragung verloren. In der mySQL-Datenbank sind sie in einem nicht identifizierten Format, das nicht UTF-8 ist, weder Latin-1 ...

Meine Hypothese ist, dass die Strings seltsam codiert sind und diese Codierung beibehalten, wenn sie erneut eingefügt werden. Wie kann ich den Zeichensatz für eine INSERT-Anweisung in Java erzwingen?

Antwort

4

Sie müssen sicherstellen, dass Sie die CSV unter Verwendung InputStreamReader mit dem richtigen Zeichensatz lesen (der der der Datei selbst ist, der in diesem speziellen Fall also ISO-8859-1 ist).

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

Sie müssen auch sicherstellen, dass die JDBC-Verbindungszeichenfolge einen characterEncoding Parameter mit dem richtigen Zeichensatz enthält (die diejenige ist, die Tabelle mit erstellt wurde, die Sie noch haben auf der MySQL-Datenbank, um herauszufinden). Wenn es sich um einen Unicode-Zeichensatz handelt, müssen Sie auch den Parameter useUnicode=true hinzufügen.

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

Ihre nächste Frage wird wahrscheinlich sein Wie bestimme ich, was meine DB-Tabelle charset verwendet?. Sie können dies mit dem Befehl SHOW tun. Es enthält Informationen über den Zeichensatz. für diese

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

Das heißt, in keinem Zusammenhang mit dem Problem, Sie sind sich bewusst, dass MySQL builtin CSV-Importmöglichkeiten bietet und dass Sie damit nicht notwendigerweise Java/JDBC müssen? Überprüfen Sie die LOAD DATA INFILE command. Sie können den Zeichensatz der CSV-Datei als Befehlsargument angeben und MySQL kümmert sich selbst um die korrekte Konvertierung.

+0

Vielen Dank, löste es !! –

+0

Gern geschehen. – BalusC