【问题标题】:On mysqlimport, line breaks, and character encoding (I think)关于 mysqlimport、换行符和字符编码(我认为)
【发布时间】:2009-05-14 22:58:36
【问题描述】:

首先,声明一下:我不是 Linux 管理员,我的 Linux 管理员也不是程序员。

也就是说,我们有一个 cronjob,它运行 mysqlimport 命令来导入每天生成的文本文件。我无法控制或参与如何创建此文件。通过反复试验,我们发现文本文件是在 Windows 机器上生成的,因此对于 lines-terminated-by 参数,我们必须指定 \r\n。上周它停止正常工作,我们确定这是因为该文件正在 Linux 中生成,因此我们将其更改为 \n。我的理解(不完全清楚)是取决于谁生成了决定使用什么平台和编码的文本文件。

我们有一个执行mysqlimport 命令的shell 脚本。当我们提供正确的编码时,一切都会完美运行。但是由于我们不知道谁将首先创建文本文件,有没有办法确定编码是什么并实现正确的换行符? (“编码”在这里是恰当的术语吗?)

【问题讨论】:

    标签: linux shell cron mysqlimport


    【解决方案1】:

    我认为您可以在 linux 上使用 dos2unix 或 unix2dos 命令在“Windows”和 Linux 编码之间进行转换。所以你不必检测使用的是什么编码,只需运行命令以确保文件具有正确的编码。

    这取决于实用程序的版本,但通常命令会像这样执行:

    dos2unix input.txt output.txt
    dos2unix input.txt > output.txt
    

    【讨论】:

      【解决方案2】:

      在调用 mysqlimport 之前,您需要对 mysqlimport 正在读取的文件运行 dos2unix 命令。如果提供的文件是在 *nix 系统上生成的,则 dos2unix 会将 Windows 行尾“\r\n”转换为 *nix 行尾“\n”,该文件保持不变。

      这样你就可以确保你总是有相同的行结束格式被馈送到你的 shell 脚本。

      最好的问候

      【讨论】:

        【解决方案3】:

        fromdosdos2unixtofrodos 是有时安装在 Linux 系统上的三个程序。您可以使用其中之一来始终将格式转换为 unix 行尾 (\n)。

        【讨论】:

          【解决方案4】:

          在运行 mysqlimport 之前,使用 tr 从 Windows 行尾删除额外的 \r 可能是最简单的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-07
            • 1970-01-01
            • 1970-01-01
            • 2012-08-26
            • 2012-09-07
            • 2010-12-28
            • 2014-12-01
            • 2021-07-11
            相关资源
            最近更新 更多