Datei mit Sonderzeichen in MySQL einlesen

Jeder Entwickler kennt dieses Szenario: Man erhält ein Dokument aus der Marketing- Abteilung, das im nächsten Projekt verwendet werden soll. Um mit den Daten dieses Dokuments arbeiten zu können, müssen diese in eine Datenbank eingelesen werden. Doch was passiert, wenn dieses Dokument nun mehrere Sonderzeichen enthält?
Zur Unterscheidung: Ich spreche hier nicht (nur) von deutschen Umlauten ä, ö, ü. Die Problematiken und Lösungen, wie man diese korrekt in eine MySQL- Datenbank eingelesen bekommt, finden sich im Netz zur Genüge. Mein Problem bezog sich konkreter auf die Sonderzeichen der tschechischen Sprache. Da die heco eine Niederlassung in Tschechien besitzt und die Aktion auf genau diesen Kundenkreis abgestimmt war, musste auf die Korrektheit dieser Zeichen natürlich besonderen Wert gelegt werden.

Wie bekommt man nun aber bspw. die Straße Průmyslová im beschaulichen Örtchen Dopbříš korrekt in eine Datenbank gespeichert? Die Standardlösung, das Dokument im CSV- Format zu exportieren und per PHP- Skript in die Datenbank zu transferieren, scheiterte leider kläglich. Nicht nur wurden mehrere Sonderzeichen inkorrekt dargestellt, sondern Worte wurden bei ganz seltenen Zeichen sogar komplett abgeschnitten.
Da weder das Einlesen der Excel- Datei in WordPress++ direkt eine Lösung war und auch beim copy- paste- Verfahren bereits die ersten Sonderzeichen verschwanden, musste ein anderer Ansatz gefunden werden.
Folgende Schritte brachten letztendlich das gewünschte Ergebnis:

  • Füllen leerer Zelleninhalte der Excel Datei mit einem Füllwert, bspw. „###“. Dies war nötig, da sonst die Anzahl Spalten variieren kann, was das Einlesen in die Datenbank erschwert
  • copy & paste des Inhaltes der Excel Datei in eine Text Datei (Word Dokument oder Textfile).
  • Öffnen der Textdatei in Notepad++. Dieses tolle Programm erkennt Tab- Stops. Dementsprechend kann man Tab- Stops durch ein Trennzeichen ersetzen lassen. In einer csv- Datei ist das meist das Komma oder das Semikolon.
  • Entfernen des Füllzeichens; durch die bereits gesetzten Trenner sollte die gleiche Spaltenanzahl bereits gegegeben sein.
  • Eventuell befinden sich noch mehrere Sonderzeichen in der letzten Zeile. Diese sollten ebenfalls entfernt werden.
  • Speichern der Datei im .csv Format
  • Diese Datei kann nun in eine MySQL Datenbank eingelesen werden. Hierfür gibt es ein extra Statement:

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE `my_table` CHARACTER SET 'latin1' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' IGNORE 1 LINES

Der Trick, der letzten Endes zum Ergebnis führte, war die explizite Angabe von CHARACTER SET 'latin1'. Aus irgendwelchen Gründen war der Zeichensatz von UTF-8 nicht ausreichend.
Zur Ergänzung: Die Anweisung am Ende IGNORE 1 LINES dient dazu, die erste Zeile des Datensatzes nicht mit in die Datenbank einzulesen. In den meisten Fällen finden sich dort nämlich die Spaltennamen der Tabelle.
Die komplette Dokumentation des MySQL Statements befindet sich hier.

– Verfasser: Martin Edelmann

Advertisements

Über hecogmbh

Die heco gmbh ist ein Handelshaus sowie ein Produzent für Fittings und Armaturen aus rostfreiem Edelstahl. Unsere Produkte werden im Maschinen-, Anlagen- und Fahrzeugbau sowohl in der chemischen Industrie als auch in der Nahrungsmittelindustrie eingesetzt. Mit mehreren Standorten europaweit sind wir immer in Ihrer Nähe.
Dieser Beitrag wurde unter Martin Edelmann abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

2 Antworten zu Datei mit Sonderzeichen in MySQL einlesen

  1. Christian de Boor schreibt:

    Hallo,
    ich wollte nur eben schnell DANKE schreiben. Der Tipp mit dem CHARACTER SET ‚latin1‘ hat mir sehr geholfen.
    MfG
    Christian de Boor

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s