【问题标题】:MySQL Load Data enclosed character and field terminator on last fieldMySQL 加载数据在最后一个字段上包含字符和字段终止符
【发布时间】:2016-10-13 15:23:44
【问题描述】:

我在将数据加载到 MySQL 时遇到了一个看似基本的问题。我正在使用:

LOAD DATA LOCAL INFILE 'C:/.../Contrato.txt'
INTO TABLE schema.contrato
FIELDS TERMINATED BY ';' ENCLOSED BY '|' LINES TERMINATED BY '/r/n' IGNORE 0 LINES;

文件中的每一行都像这样,由另一个程序生成:

|abc|;|cde|;|123|;|456|;|name|\r\n

执行加载时,除了最后一个字段外,所有内容似乎都正确加载。当我查看表格时,最后一个字段实际上显示了“|”名称周围的字符。这不是世界末日,但它会这样做很奇怪。截至目前,我正在通过添加一个';'来修复它就在 \r\n 字符之前。

这是应该的方式吗?为什么我需要在行终止符之前添加字段终止符才能删除字段包围符?

【问题讨论】:

    标签: mysql file load


    【解决方案1】:

    我可以将效果复制到一个文件中,其中包含一行,多行我只得到一个条目,其最后一列条目为 "name| |abc" 。

    我将 '/r/n' 更改为 '\r\n' 并且负载对于具有单个条目和多个条目以及周围的文件正常工作 |已正确删除

    LOAD DATA LOCAL INFILE 'C:/.../Contrato.txt'
    INTO TABLE schema.contrato
    FIELDS TERMINATED BY ';' ENCLOSED BY '|' LINES TERMINATED BY '\r\n' IGNORE 0 LINES;
    

    正确的 MySQL 转义字符是反斜杠而不是不被视为特殊字符的正斜杠 - 所以您的原始代码正在寻找 4 个字符序列“forwardslash r forwardslash n”来终止行

    【讨论】:

    • 但是你确实设法复制了这个问题。这是与文件结尾有关的错误吗?为了安全起见,我留下了额外的分号并按照您的建议更改了斜杠。感谢您的回复!
    • 这不是与文件结尾相关的错误 - 请参阅我编辑的答案。这就是为什么你的文本文件的路径名起作用的原因 - 如果你使用 Windows 的常用反斜杠路径分隔符,那么你需要将它们加倍 - 幸运的是,大多数(不是全部)s/w 静默设置了正确的分隔符,因此你可以使用正斜杠作为 MySQL 的路径分隔符。
    • 我明白了。但是,它为什么仍然分开?是否在指定字符串之上使用默认值?
    猜你喜欢
    • 2014-10-11
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多