MySQL导入csv表时UTF8字符串无效

Posted

技术标签:

【中文标题】MySQL导入csv表时UTF8字符串无效【英文标题】:MySQL Invalid UTF8 character string when importing csv table 【发布时间】: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,如下所述:***.com/a/10959780/470749 【参考方案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?

【讨论】:

以上是关于MySQL导入csv表时UTF8字符串无效的主要内容,如果未能解决你的问题,请参考以下文章

特殊字符未导入 mysql 数据库

如何将带有中文字符的 CSV UTF-8 文件导入 MySQL?

MySQL - 更新时无效的 utf8mb4 字符串

解决MySQL联表时出现字符集不一样

csv导入错误的Mysql排序规则/类型第1362行的CSV输入中的列计数无效

MySQL CSV 导入的年份日期为 0018 无效日期