我有一个来自客户端的非标准化事件日记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表示)和文本blurbs(由TEXT代表) .
我试图将数据加载到文件中:
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 .
我认为问题是文本blurbs包含多行,而MySQL正在解析文件,好像每个新行都对应一个数据行 . 我可以毫无问题地将文件加载到OpenOffice中 .
clientdata.csv文件包含2593行和570条记录 . 第一行包含列名称 . 我认为它是逗号分隔的,文本显然是用双引号分隔的 .
更新:
我在 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 记录,并且没有任何加载的数据似乎在正确的位置 .