答案是配置mysql默认字符集需修改my.cnf或my.ini文件,在[mysqld]段落添加character-set-server=utf8mb4、collation-server=utf8mb4_unicode_ci和init-connect=’SET NAMES utf8mb4’,重启MySQL服务后通过SHOW VARIABLES命令验证设置是否生效,新建数据库和表将自动继承该字符集,建议建表时显式指定字符集以确保一致性。

在 MySQL 中配置默认字符集,主要是为了确保数据库、表以及字段能够正确存储和处理特定语言的字符,比如中文。如果字符集设置不当,容易出现乱码问题。下面介绍如何查看当前字符集、修改默认字符集,以及在安装和配置过程中设置字符集的方法。
查看当前字符集设置
可以通过以下 SQL 命令查看 MySQL 当前的字符集配置:
- SHOW VARIABLES LIKE ‘character_set_%’; —— 查看客户端、连接、服务器等各部分的字符集
- SHOW VARIABLES LIKE ‘collation_%’; —— 查看排序规则
重点关注 character_set_server 和 character_set_database,它们决定了新数据库的默认字符集。
配置默认字符集(修改 my.cnf 或 my.ini)
要在 MySQL 启动时就使用指定的字符集,需要修改配置文件。linux 系统通常是 /etc/my.cnf 或 /etc/mysql/my.cnf,windows 系统是 my.ini。
在配置文件的 [mysqld] 段落下添加以下内容:
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init-connect='SET NAMES utf8mb4'
说明:
- utf8mb4 是真正支持完整 UTF-8 的字符集,能存储 emoji 和四字节字符,比 utf8(实际是 utf8mb3)更推荐
- utf8mb4_unicode_ci 是推荐的排序规则,对多语言支持更好
- init-connect 保证新连接自动设置字符集(注意:已有权限用户不受此影响)
重启服务并验证配置
修改配置后,必须重启 MySQL 服务使设置生效:
- Linux(systemd):sudo systemctl restart mysql
- windows:通过服务管理器重启 MySQL 服务
重启后再次执行:
SHOW VARIABLES LIKE ‘character_set_server’;
SHOW VARIABLES LIKE ‘collation_server’;
确认输出为 utf8mb4 和 utf8mb4_unicode_ci。
新建数据库和表的字符集继承
设置了 character-set-server 后,新创建的数据库会自动使用该字符集。例如:
CREATE DATABASE mydb;
此时 mydb 的默认字符集就是 utf8mb4。建表时也会自动继承,除非显式指定其他字符集。
建议建表时仍明确指定:
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
基本上就这些。只要在配置文件中正确设置 server 级字符集,并使用 utf8mb4,就能避免大多数中文乱码问题。关键是修改配置后要重启服务,并检查是否生效。