MySQL“将数据加载到文件中”,正好加载一半的记录

MySQL 'load data infile' loading exactly half the records

提问人: 提问时间:5/25/2023 最后编辑:O. Jones 更新时间:5/25/2023 访问量:56

问:

我有一个奇怪的问题。 我正在尝试使用以下命令将包含 59153 行的 csv 文件加载到 mysql 表中:

LOAD DATA LOCAL INFILE '/x.csv'
INTO TABLE Addresses
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

它确实有效,但恰好有一半的数据被写入数据库。

如果我按照建议的几个答案使用,则数据库中不会写入任何内容,也不会出现错误消息:LINES TERMINATED BY '\r\n';

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

.csv 文件一定有问题,因为我检查了代码中的所有其他内容,它是正确的。

我想避免编辑 .csv 文件,因为它来自外部源。

有什么建议吗?

MySQL 格式 CSV UTF-8

评论

1赞 Barmar 5/25/2023
是每隔一行加载一次,还是文件的前半部分?
0赞 5/25/2023
似乎是随机的:|58360 | |58361 | |58362 | |58365 | |58366 | |58368 | |58370 |
0赞 Barmar 5/25/2023
查看带有十六进制转储的文件,看看是否可以看到这些行的编码方式与缺失行之间的差异。
0赞 Akina 5/25/2023
似乎是随机的@Barmar不询问目标表中的值,而是询问源 CSV 中加载的行物理位置。如果在某一行上加载失败,则不会删除所有先前的行(在失败之前加载的行)(LOAD DATA 是非事务性语句)。id
0赞 Barmar 5/25/2023
@Akina我假设 CSV 文件中的 ID 是连续的,因此那里的间隙显示未加载的行。

答:

0赞 user13849712 5/25/2023 #1

好的,所以我在 Mac 上用 Numbers 打开了 .csv 文件并导出为 CSV Unicode (UTF-8),现在它正在正确加载。格式有些不对劲。感谢大家抽出宝贵时间回答。

评论

0赞 Rick James 5/26/2023
Mac 不是只有作为行终结器吗?\r