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

izj3ouym  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(424)

我试图导入csv提供的服务,应该给我的城市数据库。
城市的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` 或其他特殊空格。
希望有人能帮忙。
当做,
r6hnlfcb

r6hnlfcb1#

不确定这是否会工作,因为我还没有测试它,但你尝试过更换特殊字符。像这样:

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”。

332nm8kg

332nm8kg2#

解决了的。使用 dos2unix 上的工具 'GEODATASOURCE-CITIES-FREE.TXT' 首先,在使用sql查询之前,我在我的问题中发布了解决它的方法。期待有人能解释为什么要把它转换成 unix 行尾解决了这个问题。

相关问题