У меня есть ненормализованный дневник событий CSV от клиента, который я пытаюсь загрузить в таблицу MySQL, чтобы я мог выполнить рефакторинг в нормальном формате. Я создал таблицу с именем «CSVImport», в которой есть одно поле для каждого столбца файла CSV. CSV содержит 99 столбцов, так что сама по себе эта задача была достаточно сложной:
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);
На таблице нет никаких ограничений, и все поля содержат значения VARCHAR (256), кроме столбцов, которые содержат счетчики (представленные как INT), да / нет (представленные как BIT), цены (представленные как DECIMAL) и текстовые пометки ( представлен ТЕКСТ).
Я пытался загрузить данные в файл:
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 |
...
Вся таблица заполнена NULL
.
Я думаю, что проблема в том, что текстовые пометки содержат более одной строки, и MySQL анализирует файл так, как будто каждая новая строка будет соответствовать одной строке базы данных. Я могу загрузить файл в OpenOffice без проблем.
Файл clientdata.csv содержит 2593 строки и 570 записей. Первая строка содержит имена столбцов. Я думаю, что это разделены запятыми, а текст, очевидно, разделены двойной кавычкой.
ОБНОВИТЬ:
Если вы сомневаетесь, прочитайте руководство: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Я добавил некоторую информацию к LOAD DATA
утверждению, что OpenOffice был достаточно умен, чтобы вывести его, и теперь он загружает правильное количество записей:
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;
Но все же есть много полностью NULL
записей, и ни одна из загруженных данных, кажется, не в нужном месте.