在mysql数据库的使用过程中,字符编码设置不当很容易导致中文等字符出现乱码,修改utf8编码是很多开发者需要掌握的基础操作,不同场景下的修改方式存在差异。

修改单个数据库编码为utf8
如果需要修改已经存在的数据库的编码为utf8,可以直接执行以下sql语句,这种方式会修改数据库的默认字符集,后续新建的表会默认使用utf8编码。
-- 修改数据库test_db的字符集为utf8 ALTER DATABASE test_db CHARACTER SET utf8 COLLATE utf8_general_ci;
执行完成后可以通过下面的语句验证修改结果:
-- 查看数据库test_db的编码信息 SHOW CREATE DATABASE test_db;
修改数据表编码为utf8
如果只需要修改某个数据表的编码,不需要调整整个数据库的设置,可以使用ALTER TABLE语句完成操作,修改后表中已有字段的编码也会同步更新。
-- 修改数据表user_info的字符集为utf8 ALTER TABLE user_info CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
验证表编码的语句如下:
-- 查看数据表user_info的编码信息 SHOW CREATE TABLE user_info;
修改单个字段编码为utf8
如果只需要调整表中某个字段的编码,其他字段保持原有设置,可以单独修改字段的字符集属性,这种方式不会影响表中其他字段。
-- 修改user_info表中name字段的字符集为utf8 ALTER TABLE user_info MODIFY name VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci;
临时修改当前会话编码
如果只是当前连接会话需要临时使用utf8编码,不需要修改全局配置,可以执行以下语句,断开连接后设置会失效。
-- 设置当前会话的字符集为utf8 SET NAMES utf8;
永久修改mysql全局编码配置
如果需要让mysql服务重启后依然保持utf8编码设置,需要修改mysql的配置文件,不同系统的配置文件路径不同,windows系统一般是my.ini,linux系统一般是/etc/my.cnf。
在配置文件中添加以下内容:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci
修改完成后重启mysql服务即可生效,重启后可以通过下面的语句查看全局编码设置:
-- 查看全局字符集相关变量 SHOW VARIABLES LIKE 'character%';
修改编码注意事项
- 修改已有数据的表或字段编码前,建议先备份数据,避免编码转换过程中出现数据丢失。
- utf8在mysql中实际是utf8mb3的别名,最多支持3字节字符,如果需要支持emoji等4字节字符,建议使用utf8mb4编码。
- 修改编码后需要确认应用程序的数据库连接配置,确保连接时也指定了utf8编码,否则依然可能出现乱码。
注意:mysql中
utf8编码和标准的utf-8编码存在差异,部分特殊字符无法存储,生产环境更推荐使用utf8mb4编码替代。