在mysql中导入sql文件时,如果字符集设置不当,很容易出现中文乱码、特殊字符丢失甚至导入报错的问题,正确设置字符集是保障数据完整性的重要前提。不同的导入场景对应不同的字符集设置方式,下面逐一介绍常用方法。
方法一:命令行导入时指定字符集
使用mysql命令行客户端导入sql文件时,可以通过参数直接指定客户端和连接的字符集,这种方式适用于大多数常规导入场景。
基本命令格式如下:
# 登录mysql时指定字符集为utf8mb4,再执行导入 mysql -u 用户名 -p --default-character-set=utf8mb4 数据库名 < 要导入的sql文件路径 # 示例:导入test.sql到test_db数据库,使用utf8mb4字符集 mysql -u root -p --default-character-set=utf8mb4 test_db < /home/data/test.sql
上述命令中--default-character-set=utf8mb4会指定客户端使用的字符集,导入过程中会按照该字符集解析sql文件内容,避免编码不匹配问题。
方法二:sql文件内部声明字符集
如果sql文件本身没有指定字符集,也可以在sql文件的开头添加字符集声明语句,导入时会优先按照文件内的声明设置字符集。
在sql文件的第一行添加如下内容:
-- 声明客户端字符集为utf8mb4 SET NAMES utf8mb4; -- 可选:设置当前数据库字符集 ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
添加后保存sql文件,再使用常规导入命令即可,导入时会先执行字符集设置语句,再执行后续的表结构和数据插入语句。
方法三:已登录mysql客户端后导入设置
如果已经登录到mysql客户端,也可以通过先设置字符集再执行导入的方式完成操作,步骤如下:
- 第一步:登录mysql客户端,选择要导入数据的目标数据库
- 第二步:执行字符集设置命令
- 第三步:使用
source命令执行sql文件导入
具体命令示例如下:
-- 选择目标数据库 USE test_db; -- 设置字符集 SET NAMES utf8mb4; -- 执行导入,路径为sql文件的绝对路径 SOURCE /home/data/test.sql;
导入后校验字符集是否生效
导入完成后,需要校验表和数据字符集是否符合预期,避免后续使用出现问题。
首先校验数据库的默认字符集:
-- 查看数据库字符集配置 SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'test_db';
然后校验具体表的字符集:
-- 查看表的字符集和排序规则 SHOW TABLE STATUS FROM test_db LIKE '表名';
最后可以查询表中的中文数据,确认是否显示正常,没有乱码情况。
注意事项
需要注意sql文件本身的编码格式要和设置的字符集匹配,比如设置utf8mb4字符集,sql文件保存时也要选择utf8mb4编码,否则还是会出现乱码。如果导入的sql文件包含emoji等特殊字符,必须使用utf8mb4字符集,不能使用utf8,因为utf8不支持4字节的字符。另外如果目标数据库已经存在表,导入前最好确认表的字符集和导入设置的字符集一致,不一致的话可以先修改表的字符集再导入。