【问题标题】:MySQL LOAD DATA INFILE with fields terminated by non-ASCII characterMySQL LOAD DATA INFILE 字段由非 ASCII 字符终止
【发布时间】:2011-10-21 10:03:10
【问题描述】:

我有一个小写的 thorn 分隔文件,我需要使用 LOAD DATA INFILE ... 查询将其加载到 MySQL 数据库 (5.1.54) 中。

我尝试加载的文件与 MySQL 数据库位于同一台服务器上,并且我使用 SQLYog 从 Windows 计算机发出查询,该计算机使用 MySQL C 客户端库。

我遇到了一些重大问题,我尝试使用 FIELDS TERMINATED BY 0x00FE 语法,使用我能想到的 thorn 字符的所有变体,并且我尝试更改连接的字符集(@ 987654327@),但我一直收到警告...

Warning Code : 1638
Non-ASCII separator arguments are not fully supported

...所有数据都加载到第一列。

有什么办法可以解决这个问题吗?或者我是否愿意使用sed 对文件进行预处理,以便在加载之前用更合理的字符替换所有thorn

【问题讨论】:

    标签: mysql file load special-characters


    【解决方案1】:

    我已经成功地在dbForge Studio for MySQL 中使用Data Import tool(CSV 格式)加载了这些数据。我只是将“Þ”设置为自定义分隔符。免费的 Express Edition 完全支持从 CSV 格式导入。

    【讨论】:

    • 这是一个选项,但理想情况下我想找到一种从与数据库相同的服务器导入文件的方法。
    • 应用程序应该可以访问该文件。数据导入工具支持命令行,你可以在服务器上自动化它(当然,如果可能的话)。
    【解决方案2】:

    我决定通过将非 ASCII 字符替换为 MySQL 的 LOAD DATA INFILE ... 可以理解的字符来修复文件。

    1. 使用 od 获取违规字符的八进制字节值 - od -b file.log - 在本例中为 376

    2. 使用grep 确保文件中不存在要替换它的字符 - grep -n '|' file.log

    3. 使用sedprintf 替换非ASCII 字符-sed -i 's/'$(printf '\376')'/|/g' file.log

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2012-06-11
      • 2013-10-01
      • 2014-02-18
      • 2019-07-14
      • 2015-12-02
      • 1970-01-01
      相关资源
      最近更新 更多