首先,我要透露的是:我不是Linux管理员,我的Linux管理员也不是程序员。
也就是说,我们有一个cronjob,它运行mysqlimport命令来导入每天生成的文本文件。我不能控制或参与这个文件是如何创建的。通过反复试验,我们发现文本文件是在Windows机上生成的,因此对于lines-terminated-by参数,我们必须指定\r\n。上周它停止了正常工作,我们确定这是因为文件现在是在Linux中生成的,所以我们将其更改为\n。我的理解(不完全清楚)是,它取决于生成文本文件的人,而文本文件决定了所使用的平台和编码。
我们有一个执行mysqlimport命令的shell脚本。当我们提供正确的编码时,一切都会完美地工作。但是,既然我们不知道谁将首先创建文本文件,那么有没有一种方法可以确定编码是什么并实现正确的换行字符?(这里的“编码”是恰当的术语吗?)
发布于 2009-05-14 14:58:36
我认为你可以在linux上使用dos2unix或unix2dos命令在“Windows”和Linux编码之间进行转换。因此,您不必检测所使用的编码,只需运行命令以确保文件具有正确的编码即可。
这取决于实用程序的版本,但通常命令的执行方式如下所示:
dos2unix input.txt output.txt
dos2unix input.txt > output.txt发布于 2009-05-14 14:58:16
在调用mysqlimport之前,您需要对mysqlimport正在读取的文件运行dos2unix命令。dos2unix会将Windows行结尾"\r\n“转换为*nix行结尾"\n”如果提供的文件是在*nix系统上生成的,则该文件保持不变。
这样,您就可以确保提供给shell脚本的行尾格式始终相同。
诚挚的问候
发布于 2009-05-14 14:57:30
fromdos、dos2unix和tofrodos是三个有时安装在Linux系统上的程序。您可以使用其中之一始终将格式转换为unix行尾(\n)。
https://stackoverflow.com/questions/863695
复制相似问题