【问题标题】:Using MySQL LOAD DATA INFILE with nonprintable character delimiters使用带有不可打印字符分隔符的 MySQL LOAD DATA INFILE
【发布时间】:2009-09-29 16:33:27
【问题描述】:

我有一些供应商数据,其中 SOH(ASCII 字符 1)作为字段分隔符,STX(ASCII 字符 2)作为记录分隔符。是否可以使用 LOAD DATA INFILE 加载此数据,而无需对文件进行预处理并用更常见的字符替换这些字符?

【问题讨论】:

  • 哇,多么奇怪的情况! :)
  • 哈哈.. 告诉我...有时我讨厌供应商 :)

标签: mysql load-data-infile delimiter non-printable


【解决方案1】:

我明白了。

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE my_table 
    CHARACTER SET UTF8 
    FIELDS TERMINATED BY X'01'
    LINES TERMINATED BY X'02'
    (col1, col2, col3);

【讨论】:

  • 这很好——我没想到解析器除了在“TERMINATED BY”之后接受文字引号字符之外的任何东西。作为参考,这方面的文档位于dev.mysql.com/doc/refman/5.1/en/hexadecimal-values.html
  • 奇迹般地,这仍然有效,即使在 AWS 上使用 Aurora MySQL 5.8。
【解决方案2】:

你可以试试FIELDS TERMINATED BY _ascii 0x02。我不知道它是否适用于LOAD DATA INFILE,但它适用于SELECT(即SELECT _ascii 0x61 产生'a')。

【讨论】:

  • 我很兴奋,但它没有用.. LOAD DATA 想要一个字符串文字...我想我需要预处理.. 谢谢
【解决方案3】:

如果您使用 mysqlimport,fields-terminated-by 和 lines-terminated-by 等中的十六进制值的格式是:

mysqlimport --local --user=username --password=secret --ignore-lines=4 --default-character-set=UTF8 --fields-terminated-by=0x01 --lines-terminated-by= 0x02 --verbose 数据库名称要导入的文件

【讨论】:

    【解决方案4】:

    您可以尝试直接在字符串文字中发送 ascii 字符。如果您的连接没有分配字符集或编码,那么 mysql 可能会简单地将其作为有效字符串接受。您必须通过网络连接或将数据传送到 mysql 客户端来完成。我认为您无法在控制台中输入它。

    【讨论】:

      【解决方案5】:

      由 X'01' 终止的字段

      为我工作

      【讨论】:

        猜你喜欢
        • 2011-08-30
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多