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

c7rzv4ha  于 2023-11-14  发布在  Mysql
关注(0)|答案(5)|浏览(213)

我想通过以下方式将.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'


有什么建议吗?

mm5n2pyu

mm5n2pyu1#

我尝试的其他方法都不起作用,包括确保我的.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;

字符串

bjp0bcyl

bjp0bcyl2#

查看 * 导出 * 的设置。查找“UTF-8”。
This表明“截断文本”是由于数据没有被编码为utf8 mb 4造成的。在MySQL外部,“查找“UTF-8”。(在MySQL内部,utf8和utf8 mb 4对所有欧洲字符集都同样有效,所以ü应该不是问题。
如果它被导出为“cp 1252”(或任何一种编码),那么ü的字节对于utf8 mb 4将是无效的,从而导致截断。
如果这个分析是正确的,那么有两个解决方案:
方案A:导出为UTF-8
计划B:导入为latin1。(您不需要更改列/表定义,只需更改LOAD DATA。)

hrysbysz

hrysbysz3#

只需在文本编辑器(如Nodepad++)中打开csv文件即可
并将文件编码更改为UTF-8
然后导入你的csv文件

epggiuax

epggiuax4#

它在抱怨'M',但我认为它在München中,实际有问题的字符是下一个,变音符号'ü'
一个简单的测试方法是尝试加载一个只包含前两行的文件,看看是否有效,然后添加第三行,再试一次,看看是否失败。
如果您不能或不想替换数据中的这些特殊字符,那么您需要开始调查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
尝试通过JDBC将UTF-8插入MySQL时出现“错误的字符串值”?

1qczuiv0

1qczuiv05#

把utf8改成utf8mb4就行了
第一个月

相关问题