【问题标题】:MySQL Invalid UTF8 character string when importing csv tableMySQL导入csv表时UTF8字符串无效
【发布时间】:2017-09-10 12:07:49
【问题描述】:

我想通过以下方式将 .csv 文件导入 MySQL 数据库:

load data local infile 'C:\\Users\\t_lichtenberger\\Desktop\\tblEnvironmentLog.csv'
into table tblenvironmentlog
character set utf8
fields terminated by ';'
lines terminated by '\n'
ignore 1 lines;

.csv 文件如下所示:

但我收到以下错误,我无法解释原因:

Error Code: 1300. Invalid utf8 character string: 'M'

有什么建议吗?

【问题讨论】:

  • 导出的设置是什么?
  • 这是我的问题。对于某些字符,例如某些表情符号,您需要使用CHARACTER SET utf8mb4,如下所述:stackoverflow.com/a/10959780/470749

标签: mysql csv utf-8 character-encoding


【解决方案1】:

我尝试过的任何其他方法都没有为我工作,包括确保我的 .csv 以 UTF-8 编码保存。

这行得通:

使用LOAD DATA LOCAL INFILE时,设置CHARACTER SET latin1而不是CHARACTER SET utf8mb4,如https://dzone.com/articles/mysql-57-utf8mb4-and-the-load-data-infile所示

这是一个对我有用的完整示例:

TRUNCATE homestead_daily.answers;
SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE homestead_daily.questions;
SET FOREIGN_KEY_CHECKS = 1; 
LOAD DATA LOCAL INFILE 'C:/Users/me/Desktop/questions.csv' INTO TABLE homestead_daily.questions
CHARACTER SET latin1
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(type, question, created_at, updated_at);
SELECT * FROM homestead_daily.questions;

【讨论】:

    【解决方案2】:

    查看 export 的设置。寻找“UTF-8”。

    This 表明“截断文本”是由未编码为 utf8mb4 的数据引起的。在 MySQL 之外,“查找“UTF-8”。(在内部,MySQL、utf8 和 utf8mb4 对所有欧洲字符集都同样适用,因此ü 应该不是问题。

    如果导出为“cp1252”(或多种编码中的任何一种),ü 的字节对 utf8mb4 无效,导致截断。

    如果这个分析是正确的,有两种解决方案:

    方案 A:导出为 UTF-8

    B 计划:导入为latin1。 (您不需要更改列/表定义,只需更改LOAD DATA。)

    【讨论】:

      【解决方案3】:

      只需在文本编辑器(如 Nodepad++)中打开 csv 文件

      并将文件编码更改为 UTF-8

      然后导入您的 csv 文件

      【讨论】:

      • 这不起作用——它应该——但我只是导入为 latin1 和 poof
      【解决方案4】:

      它在抱怨'M',但我认为它在München 中,而真正有问题的字符是下一个,变音符号'ü'

      一种简单的测试方法是尝试仅加载前 2 行的文件并查看是否有效。然后添加第 3 行,再试一次,看看是否失败。

      如果您不能或不想替换数据中的这些特殊字符,则需要开始调查 CSV 文件、数据库、表、列、工具等中配置的字符集...

      您使用的是 MySQL 5.7 或更高版本吗?然后一些简单的尝试就是在您的load data 命令中更改为character set utf8mb4

      请参阅How MySQL 5.7 Handles 'utf8mb4' and the Load Data Infile 了解类似问题。

      另见:

      import geonames allCountries.txt into MySQL 5.7 using LOAD INFILE - ERROR 1300 (HY000)

      Trouble with utf8 characters; what I see is not what I stored

      “Incorrect string value” when trying to insert UTF-8 into MySQL via JDBC?

      【讨论】:

        猜你喜欢
        • 2018-02-27
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多