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

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

我想通过以下方式将.csv文件导入MySQL数据库:

  1. load data local infile 'C:\\Users\\t_lichtenberger\\Desktop\\tblEnvironmentLog.csv'
  2. into table tblenvironmentlog
  3. character set utf8
  4. fields terminated by ';'
  5. lines terminated by '\n'
  6. ignore 1 lines;

字符串
.csv文件看起来像:

但我得到了以下错误,我无法解释为什么:

  1. 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所示
下面是一个对我有效的完整示例:

  1. TRUNCATE homestead_daily.answers;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. TRUNCATE homestead_daily.questions;
  4. SET FOREIGN_KEY_CHECKS = 1;
  5. LOAD DATA LOCAL INFILE 'C:/Users/me/Desktop/questions.csv' INTO TABLE homestead_daily.questions
  6. CHARACTER SET latin1
  7. FIELDS TERMINATED BY ','
  8. ENCLOSED BY '"'
  9. LINES TERMINATED BY '\r\n'
  10. IGNORE 1 LINES
  11. (type, question, created_at, updated_at);
  12. 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就行了
第一个月

相关问题