为什么简单地打开和保存文件(不进行任何更改)会导致它在 MySQL LOAD 操作中变得不可读?

Why would simply opening and saving a file (without making any changes) cause it to become unreadable in a MySQL LOAD operation?

我正在处理从组织外部收到的 CSV 文件,因此我无法控制文件的创建方式。该文件中有 ~108K 条记录,我正在加载到专门为接收该文件而创建的 table 中。文件中有两条问题记录(错误的commas/fields号)是我执行LOAD看到错误发现的。 “太棒了,”我想,“我只要手动修复这两条记录,我就会得到一个干净的负载。”重新创建 table(加载到处女 table)后,我执行了“固定”csv 的加载。这次将加载 0(零)条记录。我所做的就是找到有问题的记录,按照需要的方式排列字段(以匹配其他 107,998 records/lines)并保存它。它们是文件中的第 58,000 条和第 63,000 条记录。我没有做其他更改。

作为我诊断过程中的一个实验,我尝试简单地在我的编辑器(Ubuntu 18.04 LTS 发行版中标配的文本编辑器)中打开原始文件的副本并保存它,没有变化。该文件也不会加载。换句话说,就 MySQL LOAD 命令而言,打开然后保存文件的简单操作“毁了它”。当我重新打开“修改后的”文件时,它打开得很好并且看起来是一个完全正常的 csv 文件。

在我几十年的编码和数据管理工作中,我从未遇到过这个问题。我什至不知道从哪里开始。显然,“保存”正在以某种方式更改文件,使其无法使用,但它可能是什么?

这是我的加载命令: 加载数据本地 INFILE '/home/[user]/myfile.csv' INTO TABLE temp005 由“,”终止的字段 由 '\n' 终止的行 忽略 1 行;

我觉得您的文件带有 Windows 风格的行分隔符 \r\n。然后当你用你的编辑器写出来时,它有 UNIX-style 行结尾:只是 \n。或者反之亦然。您应该能够通过查看文件的 before-and-after 字节数来判断。

或者您可以使用能够显示不可打印字符的编辑器。 Notepad++ 可以做到这一点。

无论如何,弄清楚如何让你的编辑保持行尾不变,你应该可以开始了。

或者在您的 LOAD DATA INFILE 命令中将 LINES TERMINATED BY '\r\n' 更改为 LINES TERMINATED BY '\n'

Edit linux 有更改行结尾的工具。这是信息。 How to convert Windows end of line in Unix end of line (CR/LF to LF)

45 年前关于行尾兼容性的错误决定是造成这种麻烦的原因。 Windows ≠ Mac ≠ UNIX。什么鬼?什么鬼?