Wie importiere ich eine CSV-Datei in eine MySQL-Tabelle?

Ich habe eine nicht normalisierte CSV-Datei für das Ereignistagebuch von einem Client, den ich in eine MySQL-Tabelle laden möchte, damit ich sie in ein vernünftiges Format umgestalten kann. Ich habe eine Tabelle mit dem Namen "CSVImport" erstellt, die ein Feld für jede Spalte der CSV-Datei enthält. Die CSV-Datei enthält 99 Spalten. Das war an sich schon eine schwierige Aufgabe:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

ie Tabelle enthält keine Einschränkungen, und alle Felder enthalten VARCHAR (256) -Werte, mit Ausnahme der Spalten, die Zählerstände (dargestellt durch INT), Ja / Nein (dargestellt durch BIT), Preise (dargestellt durch DECIMAL) und Textklammern enthalten (dargestellt durch TEXT).

Ich habe versucht, Daten in die Datei zu laden:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

Die ganze Tabelle ist mit @ gefülNULL.

Ich denke, das Problem ist, dass die Text-Klappentexte mehr als eine Zeile enthalten und MySQL die Datei analysiert, als ob jede neue Zeile einer Datenbankzeile entsprechen würde. Ich kann die Datei problemlos in OpenOffice laden.

Die Datei clientdata.csv enthält 2593 Zeilen und 570 Datensätze. Die erste Zeile enthält Spaltennamen. Ich denke, es ist durch Kommas getrennt, und der Text wird anscheinend mit doppelten Anführungszeichen getrennt.

AKTUALISIEREN

Wenn Sie Zweifel haben, lesen Sie das Handbuch:http: //dev.mysql.com/doc/refman/5.0/en/load-data.htm

Ich habe dem @ einige Informationen hinzugefüLOAD DATA -Anweisung, dass OpenOffice intelligent genug war, um zu schließen, und jetzt die richtige Anzahl von Datensätzen lädt:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Aber immer noch gibt es viele vollständigNULL records, und keine der geladenen Daten scheint an der richtigen Stelle zu sein.

Antworten auf die Frage(36)

Ihre Antwort auf die Frage