banner.jpg
Web-Development und Tools Powered by WebSellerTM

 

Home

Praxis-Tips
  Umlaute/UTF-8
  Normalisierung
  OemToAnsi
  MySQL-Import
  Site-Suche
  City Desk
  DynDNS
  MXLookup
  SPAM

SDT

Support
  Downloads
  Kontakt

Impressum

Englisch

RSS Feed

Suche:

Web Search

Made with CityDesk


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:

DBF- oder CSV-Datei:
Memo-Datei(.dbt,.fpt,.dbv):
Oem/Ansi-Konvertierung:
Textfelder als UTF-8:
Erstellung des primären Schlüsselfeldes RECNO unterdrücken:
Gelöschte Sätze auch importieren
MySQL Version:

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:

  • Die Standardversion ist auf  50 Einträge begrenzt. Zur Aufhebung dieser Einschränkung können Sie eine Linzenzdatei anfordern.
  • ImpSql kann als CGI-Skript oder Kommandozeilen-Tool benutzt werden. Es ist als Windows- und Unix-Version verfügbar. Beim Aufruf über die Kommandozeile muss die Quelldatei wie folgt angegeben werden (Windows-version):

    c:\> impsql.exe file=<DBF/CSV-Quelldatei>

    Linux-Version:

    lx:/temp # impsql.cgi file=<DBF/CSV-Quelldatei>

  • Die SQL-Verbindungsdaten werden mittels Konfigurationsdatei eingestellt. Tragen Sie also bitte die entsprechenden Werte in die Datei impsql.ini ein, bevor Sie das Tool starten.

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 .