使用LOAD DATA INFILE导入CSV遇Error Code 1300:含德语ü字符报错
解决LOAD DATA INFILE导入含德语特殊字符CSV时的Error 1300问题
Error Code: 1300本质是无效UTF-8字符字符串错误,你遇到的情况核心原因是「Workbench向导导入」和「LOAD DATA命令导入」的字符集处理逻辑不一样:
为什么之前向导能成功,现在LOAD DATA报错?
Workbench的内置导入向导会自动检测CSV文件的实际编码(比如你的文件可能是Latin1/ISO-8859-1编码,德语ü在这个编码里是单字节字符),并且自动完成编码转换后导入到你的表中(哪怕表列是UTF-8字符集)。
但LOAD DATA INFILE默认会使用当前MySQL连接的字符集(通常是UTF-8)去读取CSV文件,如果你的CSV实际不是UTF-8编码,直接读取就会把ü这类字符解析成不符合UTF-8规则的无效字节,触发1300错误——哪怕你的表列本身支持存储ü,问题出在导入时的编码解析环节,不是存储环节。
解决方法
- 先确认CSV文件的实际编码:用文本编辑器(比如Notepad++)打开CSV,查看文件的编码类型(比如Latin1、UTF-8、UTF-8 BOM等)。
- 在LOAD DATA命令中指定文件编码:
假设你的CSV是Latin1编码,命令可以这么写:LOAD DATA INFILE '/path/to/your/file.csv' INTO TABLE your_table_name CHARACTER SET latin1 -- 这里指定CSV的实际编码 FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 根据你的CSV格式调整分隔符、包围符 LINES TERMINATED BY '\n' IGNORE 1 LINES; -- 如果CSV第一行是表头,加上这句跳过 - 检查连接字符集:可以先执行这条命令查看当前连接的字符集:
如果连接字符集和CSV编码不匹配,要么修改连接字符集,要么在LOAD DATA里显式指定CHARACTER SET参数(推荐后者,更灵活)。SHOW VARIABLES LIKE 'character_set_connection';
内容的提问来源于stack exchange,提问作者Danny O
相关产品推荐
相关产品推荐

