mysql 无法使用本地加载数据导入以 \r\n\r\n 结尾的 csv 行

mysql cannot import csv lines terminated with \r\n\r\n using load data local

我正在尝试导入 CSV provided by a service that should give me cities database

csv格式的城市路径格式为:

CC_FIPS FULL_NAME_ND
AN  Aixas

AN  Aixirivall

AN  Aixovall

AN  Andorra la Vella

AN  Ansalonga

所以我提出了以下 mysql 查询:

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cc_fips,full_name_nd);

它们都被导入了,但是 full_name_nd 栏下的条目后面有一个空格。因为正如您所看到的,每行末尾都有额外的 \r\n

我可以用 cat short.txt | od -c

确认
0000000   C   C   _   F   I   P   S  \t   F   U   L   L   _   N   A   M
0000020   E   _   N   D  \r  \n   A   N  \t   A   i   x   a   s  \r  \n
0000040  \r  \n   A   N  \t   A   i   x   i   r   i   v   a   l   l  \r
0000060  \n  \r  \n   A   N  \t   A   i   x   o   v   a   l   l  \r  \n
0000100  \r  \n   A   N  \t   A   n   d   o   r   r   a       l   a
0000120   V   e   l   l   a  \r  \n  \r  \n   A   N  \t   A   n   s   a
0000140   l   o   n   g   a  \r  \n  \r  \n   A   N  \t   A   n   y   o
0000160   s  \r  \n  \r  \n   A   N  \t   A   r   a   n   s  \r  \n  \r
0000200  \n   A   N  \t   A   r   i   n   s   a   l  \r  \n  \r  \n   A
0000220   N  \t   A   u   b   i   n   y   a  \r  \n  \r  \n   A   N  \t

所以修改查询,使用\r\n\r\n:

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n\r\n'
IGNORE 1 LINES
(cc_fips,full_name_nd);

但是该查询将不起作用:(

Query OK, 0 rows affected (0.40 sec)
Records: 0  Deleted: 0  Skipped: 0  Warnings: 0

我什至尝试过

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cc_fips,@col_with_spaces)
SET full_name_nd = TRIM(@col_with_spaces);

但显然,TRIM() 不适用于 \r\n 或其他特殊空格。

希望有人能提供帮助。

此致,

不确定这是否有效,因为我还没有测试过,但是您是否尝试过替换特殊字符。像这样:

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cc_fips,@col_with_spaces)
SET full_name_nd = TRIM(REPLACE(@col_with_spaces, '\r\n', ''));

如果不行,请尝试使用'\n'代替'\r\n'。

已解决。 在使用我在问题中发布的 SQL 查询之前先在 'GEODATASOURCE-CITIES-FREE.TXT' 上使用 dos2unix 工具解决了它。期待有人能解释为什么将其转换为 unix 行结尾解决了它。