如何在MySQL中导入CSV文件避免出现乱码字符
解决UTF-8 CSV导入MySQL后乱码的问题
核心排查方向:导入全链路编码一致性
从报错信息\xD0\x93\xC2\xB1a来看,数据本身包含非ASCII字符(如西里尔字母类字符),必须用utf8mb4存储,ASCII完全不适用,以下是具体解决步骤:
强制导入过程使用utf8mb4编码
- 若用
mysql命令行导入,添加字符集参数:mysql --default-character-set=utf8mb4 -u 用户名 -p clientvalidata < 你的文件.csv - 若用
LOAD DATA INFILE语句,必须指定字符集:LOAD DATA INFILE '/本地路径/你的文件.csv' INTO TABLE data CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 匹配你的CSV分隔符、包围符 LINES TERMINATED BY '\n' -- Windows环境可能需改为'\r\n' IGNORE 1 ROWS; -- 若CSV包含表头行则添加
- 若用
验证CSV文件的真实编码
- 检查是否为带BOM的UTF-8:部分工具导出的UTF-8会带BOM头,导致MySQL解析错误。用Notepad++等工具将文件转为「UTF-8 无BOM」格式。
- 用命令行确认编码(Linux/macOS):
输出需显示file -i 你的文件.csvcharset=utf-8,而非其他编码。
确保库、表、字段编码统一为utf8mb4
- 先检查当前编码配置:
-- 查数据库编码 SELECT DEFAULT_CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'clientvalidata'; -- 查表编码 SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'clientvalidata' AND TABLE_NAME = 'data'; -- 查字段编码 SELECT COLUMN_NAME, CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'clientvalidata' AND TABLE_NAME = 'data'; - 若字段编码不是utf8mb4,执行修改(禁止用ASCII):
ALTER TABLE `clientvalidata`.`data` CHANGE COLUMN `Last name` `Last name` VARCHAR(100) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci' NULL DEFAULT NULL;
- 先检查当前编码配置:
修正客户端显示的字符集
- 若用
mysql命令行查询,先执行:SET NAMES utf8mb4; - 若用GUI工具(如Navicat、phpMyAdmin),在连接设置中把字符集改为
utf8mb4,避免显示层乱码。
- 若用
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

