|
MySQL-Datenimport
Von Antje Binas-Holz
Letzte Änderung:
Donnerstag, 16. Februar, 2006
Mehr Informationen zu phpMyAdmin und anderen MySQL-Werkzeugen finden Sie auf der Homepage von PhpMyAdmin.
Kennen Sie das Problem? Sie wollen ein bestehendes Projekt auf MySQL umstellen und suchen dringend ein geeignetes Konvertierungstool.
Aus dieser Überlegung heraus entstand die
Applikation ImpSql. Sie ist in der Lage,
Daten im DBF- oder CSV-Format zu importieren.
Dabei werden verschiedene DBF-Formate wie Foxpro,
Clipper, Visual Objects inclusive diverser
Memo-Formate unterstützt.
Das Tool ist quasi ein "Abfallprodukt" von SqlDBU. Allerdings kann es in zwei verschiedenen Modi, dem Verbindungsmodus sowie dem autonomen Modus arbeiten. Im ersten Fall besteht eine Verbindung zur MySQL Datenbank, so dass die Daten direkt in eine Tabelle importiert werden. Im verbindungslosen Modus wird stattdessen eine Textdatei erzeugt, die alle SQL-Kommandos zum Datenimport enthält.
Import ohne MySQL-Verbindung
Ohne bestehende MySQL-Verbindung werden die Daten lediglich von einer Datei in eine andere konvertiert. Der Vorteil dieser Variante besteht darin, dass hierbei SQL-Anweisungen erzeugt werden, die auch von anderen SQL-Datenbanken verarbeitet werden können. Sie kann also vom entsprechenden SQL-Tool,
z.B. PhpMyAdmin oder SqlDBU, importiert werden. Ausserdem ergibt sich damit die Option, das Programm als CGI-Skript laufen zu lassen und es auf dieser Website zur Verfügung zu stellen.
Geben Sie dazu die entsprechende(n) Datei(en) für den Upload an. Im Gegenzug erhalten Sie das Ergebnis als Datei-Download:
Hinweise: Bitte laden Sie nur Dateien mit einer Grösse bis maximal 2 MByte hoch. Verwenden Sie keine .xls-Dateien, die werden nicht unterstützt. Die Daten werden auf dem Server nicht gespeichert
sondern lediglich konvertiert. Alle dabei entstehenden temporären
Daten werden noch während der Verarbeitung des Requests
wieder gelöscht. Falls auf dem Zielsystem eine MySQL-Version 5 oder höher installiert ist, sollte als Wert für MySQL Version unbedingt 5 angegeben werden (siehe Kommandozeilenargumente).
Import mit bestehender MySQL-Verbindung
Dieser Modus des Tools kann zwar online demonstriert werden, allerdings ist dann die Frage, wie Sie an Ihre Daten kommen sollen. Besser ist es, das Archiv impsql-10.zip oder Impsql-1.0.tar.gz herunterzuladen, auszupacken und das Programm lokal laufen zu lassen.
Beachten Sie bitte folgende Hinweise:
CSV-Import-Features
Bei CSV-Dateien ist es wichtig, dass die Feldnamen in der ersten Zeile der Datei eingetragen sind. Nachfolgend sehen Sie zwei Beispiele für gültige .Csv-Dateien:
"FIRST";"LAST";"LASTCALL"
"Wiley";"Morse";"2003-03-22"
"Edward";"Hyatt";"2003-08-11"
...
Das nachfolgende Format ist ebenfalls möglich:
FIRST;LAST;LASTCALL
Wiley;Morse;2003-03-22
Edward;Hyatt;2003-08-11
...
Aber auch ohne diese Informationen kommt ImpSql zurecht. Das Programm besitzt für den Csv-Import folgende Features:
- Wenn die Feldnamen fehlen werden die Spalten wie folgt benannt: "FIELD1", "Field2" bis "FIELDn".
- Die Spaltenwerte werden beim Import analysiert um die richtigen Strukturinformationen wie Datentyp und Länge zu bestimmen.
- Ingültige Spaltennamen wie leere Strings oder in MySQL reservierte Worte werden automatisch korrigiert, um Fehlern beim MySQL-Import vorzubeugen.
- Strings, die Zeichen oberhalb 127 (non printable) enthalten (z.B. Umlaute) werden hexadezimal dargestellt, z.B.
"Häberle" als 0x48E46265726C65. Damit werden Verfälschungen fremder Zeichensätze durch die MySQL-Escape-Funktion vermieden.
- Optionale Oem/Ansi-Konvertierung falls die CSV-Datei Zeichenketten enthält, die auf dem OEM-Zeichensatz basieren.
- Strings und Text-Felder können optional als UTF-8-Zeichenketten in der Datenbank gespeichert werden ( UNICODE-Unterstützung).
DBF-Import-Features
Das ursprünglich für dBASE II bestimmte DBF-Format wurde im Laufe der Zeit in verschiedene Richtungen erweitert. Entwicklungsszsteme wie CA-Clipper, CA-Visual Objects, MS-FoxPro oder dBASE benutzen unterschiedliche Techniken und Formate, um Memofelder oder BLOBs (Binary Large OBjects) abzuspeichern.
Das Tool Impsql versucht so viele DBF-Formate wie möglich zu unterstützen und bietet dabei folgende Features:
- Verarbeitung von .DBT, .DBF and .FPT Memodateien.
- Strings, die Zeichen oberhalb 127 (non printable) enthalten (z.B. Umlaute) werden hexadezimal dargestellt, z.B.
"Häberle" als 0x48E46265726C65
. Damit werden Verfälschungen fremder Zeichensätze durch die MySQL-Escape-Funktion vermieden.
-
BLOBs werden ebenfalls hexadezimal für die entsprechenden INSERT-Kommandos aufbereitet, um den exakten Inhalt zu bewahren.
- Optionale Oem/Ansi-Konvertierung falls die DBF-Datei Zeichenketten enthält, die auf dem OEM-Zeichensatz basieren.
- Strings und Memo-Felder können optional als UTF-8-Zeichenketten in der Datenbank gespeichert werden ( UNICODE-Unterstützung).
Kommandozeilenargumente
Das Format der Kommandozeile hängt von der Umgebung ab, in dem das Programm aufgerufen wird. Im Kommando- oder Shell-Fenster werden die einzelnen Argumente mit einem Blank (" ") voneinander getrennt, in einer CGI-Umgebung dagegen mit einem Ampersand ("&"). Die Argumente selbst sind dagegen in beiden Umgebungen identisch:
- file=file_name (Input-Datei - zwingend)
- table=table_name (Name der resultierenden Tabelle - optional)
- oem2ansi=oem_file_name (Datei mit den für die betreffende Sprache zuständigen Oem/Ansi-Translation-Codes - optional)
- delim=delimiter_char (Definition des Trennzeichens für CSV-Dateien - optional. Das Trennzeichen wird standardmässig automatisch durch Impsql ermittelt.)
- childtables=column_list (Liste der Spalten, deren Inhalt in separaten Kind-Tabellen abgespeichert werden sollen - mehr dazu im Beitrag MySQL Datenimport und Normalisierung )
-
charset=utf8 (Strings und Text-Felder werden als UTF-8-Zeichenketten in der Datenbank gespeichert ).
-
primkey=off (Unterdrückung der Erzeugung des Primärschlüssels RECNO ).
- deleted=[on|off] (Gelöschte Sätze beim Import der DBF-Daten einbeziehen - on, oder ignorieren - off. Standardeinstellung ist off)
- updatekey=<column_name> (Aktualisierung bestehender Zeilen bzw. Einfügen neuer beim Import der DBF/CSV-Datei, wobei die Spalte <column_name> dazu benutzt wird, um bereits vorhandene Sätze zu identifizieren.)
- sqlversion=<version_number> Basis-MySQL-Version auf dem Zielsystem (optional - Standard ist 4). Diese Angabe ist beim Import mit bestehender MySQL-Verbindung nicht notwendig, da die Version dabei intern ermittelt wird. Beim Import ohne Verbindung kann das Weglassen von sqlversion=5 beim Import der erstellten Datei auf einem MySQL 5.x System zur Fehlermeldung "Data too long for column" führen. Weitere Informationen finden Sie u.a im Beitrag Guaranteeing Data Integrity with MySQL 5.0.
Beispiel 1:
Aufruf von impsql.exe unter Windows (W9x, W2K, XP) um die DBF-Datei customer.dbf, die deutsche Oem-Zeichenketten enthält, in die Tabelle CUST zu importieren:
c:\temp> impsql.exe file=customer.dbf oem2ansi=german.oem table=CUST
Beispiel 2: Aufruf der Linux-Version um die CSV-Datei cust.csv in die Tabelle CUST zu importieren, wobei das Hash-Zeichen "#" in cust.csv als Trenner fungiert:
lx:/tmp # impsql.cgi file=cust.csv table=CUST delim=#
Beispiel 3: Aufruf von Impsql als CGI-Script auf einem Linux-Server um die CSV-Datei cust.csv in die Tabelle CUST zu importieren:
http://www.mydomain.com/cgi-bin/impsql.cgi?file=cust.csv&table=CUST
Hinweis: Die Datei cust.csv muss sich im Verzeichnis -/cgi-bin befinden, also via POST request mit Impsql oder per FTP auf den Server hochgeladen werden.
Beispiel 4:
Aufruf von impsql.exe unter Windows (W9x, W2K, XP) um die Datei test.csv in die erste Normalform zu importieren (mehr dazu im Beitrag MySQL Datenimport und Normalisierung):
c:\temp> impsql.exe file=test.csv childtables=Group1,Group2,OS
Ausführbare Programme und andere Dateien
Das Unterverzeichnis bin des Projektarchivs enthält die folgenden ausführbaren Versionen des Tools sowie andere Dateien, die zur korrekten Arbeitsweise des Tools notwendig sind:
- Impsql.cgi (Linux-Version)
- Impsql.ini (Konfigurationsdatei)
- *.oem (Oem/Ansi-Translation-Codes für verschiedene Sprachen)
- Reserved.cfg (Konfigurationsdatei mit allen für MySQL reservierten Worte, die nicht als Feld- oder Tabellenname verwendet werden dürfen)
- Oemtab.exe (Win32-Tool zur Erstellung von nicht vorhandenen sprachspezifischen Oem/Ansi-Translation-Code-Dateien)
Oem/Ansi-Konvertierung
Eines der optionalen Möglichkeiten, die Impsql bietet, ist die Oem/Ansi-Konvertierung für Dateien, die unter Dos bzw. Windows mit einem Dos-Programm erstellt wurden. Die Art und Weise dieser Konvertierung ist sehr stark von der jeweiligen Sprache abhängig und damit eine ständige Quelle von Problemen. Der beste Weg, dem damit verbundenen Ärger aus dem Weg zu gehen ist eine freie Konfigurierbarkeit der Oem/Ansi-Konvertierung.
Dazu befindet sich in der Setup-Datei impsql.ini ein der Eintrag Oem2Ansi, Sektion ENVIRONMENT, der auf die Tabelle mit den für die jeweilige Sprache definierten Oem/Ansi-Codes zeigt. Im folgenden Beispiel ist german.oem gesetzt:
[ENVIRONMENT]
...
Oem2Ansi=german.oem
Dieser als Standard fungierende Eintrag kann durch die Kommandozeilen-Optioin oem2ansi=mylanguage.oem überschrieben werden, was natürlich voraussetzt, dass mylanguage.oem verfügbar ist. Ist das nicht der Fall, so kann die Datei sozusagen im Eigenbau erstellt werden. Wie, das erfahren Sie im Beitrag Von Oem zu Ansi .
|