我想通过以下方式将.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'
有什么建议吗?
答案 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?