У мене від клієнта є ненормалізований 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/uk/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
записів, і жодна з даних, які завантажуються, здається, не в потрібному місці.