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

问题描述 投票:0回答:2

我正在尝试将 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(时区不是 URL)。

我对sql技术不是很有经验,但我认为将数据放入数据库应该不那么难。有人可以告诉我吗 1. 为什么会出现这种情况? 2. 如何解决?

mysql csv gtfs
2个回答
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);

0
投票

这对我有帮助:

如果存在代理则删除表;

创建表

agency
( Agency_id VARCHAR(50) 主键, 机构名称 VARCHAR(255), Agency_url VARCHAR(255), Agency_timezone VARCHAR(50), Agency_lang VARCHAR(50), Agency_phone VARCHAR(50) );

导入 导入文件: 文件字符集:utf-8 部分导入:从第一个查询开始跳过此数量的查询(对于 SQL):1 格式:CSV 特定于格式的选项 各列之间用以下符号分隔: , 包含以下内容的列:“ 列转义为:\

导入按钮 https://github.com/BlinkTagInc/gtfs-to-mysql/blob/master/gtfs_to_mysql.sql

© www.soinside.com 2019 - 2024. All rights reserved.