我想通过以下方式将 .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;
但是我收到以下错误,我无法解释原因:
Error Code: 1300. Invalid utf8 character string: 'M'
有什么建议吗?
我尝试过的其他方法都对我不起作用,包括确保我的 .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;
查看导出的设置是什么。寻找“UTF-8”。
This表明“截断文本”是由于数据未编码为utf8mb4造成的。在 MySQL 之外,“查找“UTF-8”。(在 MySQL 内部,utf8 和 utf8mb4 对于所有欧洲字符集同样有效,因此
ü
应该不是问题。
如果导出为“cp1252”(或任何一种编码),则
ü
的字节对于 utf8mb4 无效,从而导致截断。
如果这个分析正确,有两种解决方案:
A 计划:导出为
UTF-8
。
B 计划:导入为
latin1
。 (您不需要更改列/表定义,只需更改 LOAD DATA
。)
只需在文本编辑器(如 Nodepad++)中打开 csv 文件
并将文件编码更改为UTF-8
然后导入您的 csv 文件
它在抱怨
'M'
,但我认为它在 München
中,实际有问题的字符是下一个,元音变音 'ü'
。
一种简单的测试方法是尝试加载仅包含前两行的文件并查看是否有效。然后添加第三行,再试一次,看看是否失败。
如果您不能或不想替换数据中的这些特殊字符,那么您需要开始研究 CSV 文件、数据库、表、列、工具等中配置的字符集...
您使用的是 MySQL 5.7 或更高版本吗?那么简单的尝试就是在
character set utf8mb4
命令中更改为 load data
。
有关类似问题,请参阅MySQL 5.7 如何处理“utf8mb4”和加载数据文件。
另请参阅:
使用 LOAD INFILE 将 geonames allCountries.txt 导入 MySQL 5.7 - ERROR 1300 (HY000)
只需将utf8更改为utf8mb4,就可以了
character set utf8mb4