mysql 无法使用 load data local 导入以\r\n\r\n 结尾的 csv 行

标签 mysql csv load-data-infile eol

我正在尝试导入 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”。

关于mysql 无法使用 load data local 导入以\r\n\r\n 结尾的 csv 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52949467/

相关文章:

PHP:每次检测到逗号后在MySQL中插入数据

MySQL validate_password_policy 未知系统变量

csv - Spark 2.1 无法在 CSV 上写入 Vector 字段

Python 在循环中从 Csv 创建 XML

Python:MySQLdb LOAD DATA INFILE 静默失败

mysql - 将 MySQL 数据库转换为 SQLite

PHP MySQL 单页多个表单和多个提交

csv - 从 Google Cloud Storage 加载 csv 文件时出现 BigQuery 错误

mysql - 定期将数据加载到表中的最佳方法是什么

mysql - LOAD DATA INFILE 可以接受 LINES STARTING BY 的正则表达式吗?