【问题标题】:MySQL LOAD DATA INFILE issue with special characters带有特殊字符的 MySQL LOAD DATA INFILE 问题
【发布时间】:2014-02-18 03:19:55
【问题描述】:

我在 LOAD DATA LOCAL INFILE 加载 utf8 文件时遇到问题。 查询如下所示:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE artikel CHARACTER SET UTF8
FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

但带有“Dämmung”等特殊字符的字段将被剪切为“D”。

SHOW VARIABLES LIKE '%_set_%';

显示全部设置为utf8,我什至用notepad++确保文件是utf8。

这真的很有帮助,如果有人知道建议,这是一个巨大的文件,我想避免手动输入错误的字段:-/

【问题讨论】:

  • 您需要将连接、数据库、表和列的编码设置为与CSV文件中保存的数据相同的字符集。
  • @SathishD:不,你没有——但即使你这样做了,OP 声明所有字符集变量都已经设置为 utf8。虽然如果列编码不支持文件中的所有字符(不必与文件的编码相同),数据很可能会被截断。
  • 感谢您的快速解答!原因是我的选择查询没有正确更新表格,所以上面的查询是正确的。对不起,我的错
  • 我也遇到了同样的问题。命令与上面完全相同。但是,所有法语字符总是会被截断,从而使数据变得不完整。 CSV 文件已经是 UTF-8,表排序规则是 utf8_general_ci。

标签: mysql utf-8 special-characters


【解决方案1】:

请注意数据库和表列的排序规则!

我将utf8mb4_unicode_520_ci 用于数据库和表列。

在查询中保留CHARACTER SET utf8 一切正常。

【讨论】:

    【解决方案2】:

    它对我有用。

    LOAD DATA LOCAL INFILE 'D:/File.csv'
    INTO TABLE my_table
    CHARACTER SET latin1 
    FIELDS TERMINATED BY ';'
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY '\\' 
    LINES TERMINATED BY '\r\n'
    

    【讨论】:

      【解决方案3】:

      这是我在解决特殊字符问题时的解决方案:

      我会解释:

      • 你可以把;改成,,因为我用csv;分隔的不像你
      • 我的列中有换行符,所以我用 \\ 转义了

      脚本是:

      LOAD DATA LOCAL INFILE 'D:/File.csv'
      INTO TABLE my_table
      CHARACTER SET latin1 
      FIELDS TERMINATED BY ';'
      OPTIONALLY ENCLOSED BY '"'
      ESCAPED BY '\\' 
      LINES TERMINATED BY '\r\n'
      

      【讨论】:

        【解决方案4】:

        不幸的是,LOAD DATA 不接受 utf8 输入,无论在 cli 选项上传递什么字符集并由表使用。我没有在文档中找到它并认为它是一个错误。

        解决方法是改用mysqlimport。该解决方案的缺点是,如果您想在导入期间禁用外键检查(不适用于 MyISAM 表),则必须全局禁用它,这需要 SUPER 权限:

        echo "SET GLOBAL FOREIGN_KEY_CHECKS=0;" | mysql -u root -p
        

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。 有一个“hack”可以解决这个问题:使用 UTF8 维护所有内容。例外是“加载数据本地......”。当我使用 LATIN1 而不是 UTF8 时,它可以正常工作。

          【讨论】:

            猜你喜欢
            • 2011-08-30
            • 1970-01-01
            • 2016-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-07
            • 2012-10-17
            • 2012-10-05
            相关资源
            最近更新 更多