将Coma分隔文本文件加载到MySQL:无法正常工作

时间:2016-11-10 16:38:30

标签: mysql csv gtfs

我正在尝试将GTFS文件(逗号分隔的文本文件)加载到MySQL数据库。 MySQL Workbench导入向导不起作用。我将agency.txt文件复制到agency.csv并使用向导选择它。经历了所有的步骤;一切都是一个绿色的勾选标记,但它说最后“0记录导入”。没有错误,没有警告。 我用的是mysql shell。 这是我的档案:

>>head -2 agency.csv
agency_name,agency_url,agency_timezone,agency_lang,agency_phone,agency_fare_url
Chicago Transit Authority,http://transitchicago.com,America/Chicago,en,1-888-YOURCTA,http://www.transitchicago.com/travel_information/fares/default.aspx

这是我创建表并加载数据的sql脚本:

CREATE TABLE agency (
    agency_name VARCHAR(255)  character set utf8,
    agency_id VARCHAR(255)  character set utf8,
    agency_url VARCHAR(255)  character set utf8,
    agency_timezone VARCHAR(255)  character set utf8
);
LOAD DATA LOCAL INFILE '/cta/agency.csv' INTO TABLE agency
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(agency_name,@vagency_id,agency_url,agency_timezone)
SET agency_id = IF(agency_id IS NULL, agency_name, @vagency_id);

这是加载到表中的内容:

mysql> select * from agency;
+---------------------------+---------------------------+----------------------------+-----------------+
| agency_name               | agency_id                 | agency_url                 | agency_timezone |
+---------------------------+---------------------------+----------------------------+-----------------+
| Chicago Transit Authority | Chicago Transit Authority | America/Chicago            | en              |

请注意,表格中的Agency_url是America / Chicago(时区不是网址)。

我对sql技术不是很有经验,但我认为将数据放到数据库中并不是那么困难。有人能告诉我 1.为什么会这样? 2.如何解决?

1 个答案:

答案 0 :(得分:0)

在设置实际值之前,您指的是agency_id子句中的SET列。因此,NULL导致第二列被赋予第一列的值。将您的代码更改为:

SET agency_id = IF(@vagency_id IS NULL, agency_name, @vagency_id);
                   ^^^ DON'T use agency_id here

完整代码:

LOAD DATA LOCAL INFILE '/cta/agency.csv' INTO TABLE agency
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(agency_name, @vagency_id, agency_url, agency_timezone)
SET agency_id = IF(@vagency_id IS NULL, agency_name, @vagency_id);
相关问题