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字符串无效的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有中文字符的 CSV UTF-8 文件导入 MySQL?