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

时间:2017-04-14 08:32:46

标签: mysql csv utf-8 character-encoding import-csv

我想通过以下方式将.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文件如下所示: enter image description here

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

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

有什么建议吗?

4 个答案:

答案 0 :(得分:11)

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

This表示“截断文本”是由未编码为utf8mb4的数据引起的。在MySQL之外,“寻找”UTF-8“。(内部,MySQL,utf8和utf8mb4同样适用于所有欧洲字符集,因此 <bean id="loginInterceptor" class="kr.co.smartpayweb.login.controller.LoginInterceptor"></bean> <interceptors> <interceptor> <mapping path="/login/login.do"></mapping> <ref bean="loginInterceptor"/> </interceptor> </interceptors> 应该不是问题。

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

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

计划A:导出为ü

计划B:导入为UTF-8。 (您无需更改列/表定义,只需更改latin1。)

答案 1 :(得分:6)

我尝试的其他所有工作,包括确保.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 :(得分:3)

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

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

然后导入你的csv文件

答案 3 :(得分:2)

它抱怨pd.read_csv('some_file.csv', sep='|'),但我认为它在'M',实际有问题的角色是下一个,变音符München

一种简单的测试方法是尝试加载只有前两行的文件。看看是否有效。然后添加第3行,再试一次&amp;看看是否失败。

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

您使用的是MySQL 5.7或更高版本吗?然后,一些简单的尝试就是在'ü'命令中更改为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?