我有一个来自客户端的非标准化事件日记 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 表示)和文本简介(由 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。
我认为问题在于文本简介包含不止一行,并且 MySQL 正在解析该文件,就好像每一新行都对应于一个数据库行。我可以毫无问题地将文件加载到 Open中。
clientdata.csv 文件包含 2593 行和 570 条记录。第一行包含列名称。我认为它是逗号分隔的,并且文本显然是用双引号分隔的。
更新:
如有疑问,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/load-data.html
我在 LOAD DATA 语句中添加了一些信息, 足够智能来推断,现在它加载了正确数量的记录:
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 记录,并且加载的数据似乎都没有在正确的位置。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号