mysql - 将逗号分隔的文本文件加载到 MySQL : doesn't work correctly

标签 mysql csv gtfs

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

>>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(时区不是 url)。

我对 sql 技术不是很有经验,但我认为将数据放入数据库应该不难。谁能告诉我 1. 为什么会这样? 2、如何解决?

最佳答案

在设置实际值之前,您指的是 SET 子句中的 agency_id 列。因此,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);

关于mysql - 将逗号分隔的文本文件加载到 MySQL : doesn't work correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532719/

相关文章:

mysql - 如何将 MySQL 查询结果存储到本地 CSV 文件中?

python - 如何比较 CSV 中的行与上一行?

python - Pandas:读取文件的头部和中间部分

public - 开放式旅行计划器的可扩展性(或替代库)

mysql - 使用 MySQL 一对多关系

php - SQL 检查行中是否有空列 - 比较它们

Postgresql 错误地插入值

java - 如何在我的服务器上安装和配置 OpenTripPlanner?

mysql - 如何编写触发器以在 MYSQL 中中止删除?

javascript - 将某些 CSV 数据加载到 HTML 文本区域