Ich habe eine nicht normalisierte Ereignistagebuch-CSV 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 namens 'CSVImport' erstellt, die ein Feld für jede Spalte der CSV-Datei enthält. Die CSV enthält 99 Spalten, daher war dies 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);
Die Tabelle enthält keine Einschränkungen, und alle Felder enthalten VARCHAR (256) -Werte, mit Ausnahme der Spalten, die Zählwerte (dargestellt durch INT), Ja / Nein (dargestellt durch BIT), Preise (dargestellt durch DECIMAL) und Klappentexte (dargestellt) enthalten. vertreten 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 |
...
Der ganze Tisch ist gefüllt mit NULL
.
Ich denke, das Problem ist, dass die Klappentexte mehr als eine Zeile enthalten und MySQL die Datei so analysiert, als würde jede neue Zeile einer Datenbankzeile entsprechen. 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 ist anscheinend durch doppelte Anführungszeichen getrennt.
AKTUALISIEREN:
Lesen Sie im Zweifelsfall das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Ich habe der LOAD DATA
Aussage, dass OpenOffice intelligent genug war, um daraus zu schließen, einige Informationen hinzugefügt , und jetzt wird die richtige Anzahl von Datensätzen geladen:
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;
Trotzdem gibt es viele vollständige NULL
Datensätze, und keine der geladenen Daten scheint am richtigen Ort zu sein.