Ich habe eine unnormalisierte Ereignis-Tagebuch-CSV von einem Kunden, die ich versuche, in eine MySQL-Tabelle zu laden, so dass ich in ein vernünftiges Format umgestalten kann. Ich habe eine Tabelle namens "CSVImport" erstellt, die für jede Spalte der CSV-Datei ein Feld enthält. Die CSV-Datei enthält 99 Spalten, so dass dies an sich schon eine schwierige Aufgabe war:
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);
Für die Tabelle gelten keine Einschränkungen, und alle Felder enthalten VARCHAR(256)-Werte, mit Ausnahme der Spalten, die Zählungen (dargestellt durch INT), Ja/Nein (dargestellt durch BIT), Preise (dargestellt durch DECIMAL) und Textauszüge (dargestellt durch TEXT) enthalten.
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 liegt darin, dass die Textauszüge mehr als eine Zeile enthalten und MySQL die Datei so analysiert, als ob jede neue Zeile einer Datenbankzeile entsprechen würde. Ich kann die Datei ohne Probleme in OpenOffice laden.
Die Datei clientdata.csv enthält 2593 Zeilen und 570 Datensätze. Die erste Zeile enthält Spaltennamen. Ich glaube, sie ist durch Kommata getrennt, und der Text ist offensichtlich durch doppelte Anführungszeichen getrennt.
UPDATE :
Im Zweifelsfall lesen Sie das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Ich habe einige Informationen zu den LOAD DATA
Anweisung, die OpenOffice schlau genug war, um daraus zu schließen, und jetzt lädt es die richtige Anzahl von Datensätzen:
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 es gibt immer noch eine ganze Reihe von NULL
Datensätze, und keine der geladenen Daten scheint sich an der richtigen Stelle zu befinden.