mysql 8.0官方默认字符集为utf8mb4,不推荐使用gbk;若强依赖gbk,须在my.ini的[mysqld]段添加character-set-server=gbk和collation-server=gbk_chinese_ci,重启服务后验证character_set_server与新建库的create database语句中是否含default character set gbk。

MySQL 8.0 默认字符集已是 utf8mb4,官方不推荐、也不保证 gbk 在全部场景下可用;若业务强依赖 GBK(如对接老旧 Windows 客户端或 legacy 系统),必须手动配置,但要注意:服务端设为 gbk 后,所有新库/新表/新列默认继承该编码,且无法存储 emoji、生僻汉字、Unicode 4 字节字符。
修改 my.ini 中的 server 级别字符集参数
Windows 下 MySQL 8.0 的主配置文件是 my.ini,位置通常在 C:\ProgramData\MySQL\MySQL Server 8.0\(注意 ProgramData 是隐藏文件夹)。直接编辑该文件,在 [mysqld] 段落下添加:
[mysqld] character-set-server=gbk collation-server=gbk_chinese_ci
⚠️ 不要写 default-character-set=gbk —— 这个参数在 MySQL 8.0 中已被弃用,仅对 [client] 和 [mysql] 有效,且不能影响服务端行为。
关键点:
-
character-set-server才控制新建数据库的默认字符集,必须设为gbk -
collation-server必须匹配,gbk_chinese_ci是 GBK 唯一受支持的校对规则 - 不要同时设置
init_connect='SET NAMES gbk':它对 SUPER 用户无效,且可能和客户端实际编码冲突
为什么 show variables like '%character%' 里仍有 utf8mb4?
即使改了 my.ini 并重启了服务,执行 show variables like '%character%' 仍可能看到部分变量(如 character_set_client、character_set_results)显示 utf8mb4。这不是配置失败,而是因为:
- 这些变量反映的是当前连接的会话级设置,不是全局配置值
- MySQL 客户端(如命令行
mysql.exe)启动时会按自身环境自动协商字符集;Windows CMD 默认是 GBK,但mysql.exe可能仍尝试用 UTF-8 握手 - 真正生效的是
character_set_server和character_set_database,它们决定新建对象的默认编码
验证是否生效:创建新数据库后执行 show create database testdb;,确认输出中包含 DEFAULT CHARACTER SET gbk。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
客户端连接时的字符集协商陷阱
Windows 下用 CMD 连 MySQL,即使服务端设了 gbk,仍可能乱码,原因在于三层编码错位:
- CMD 控制台本身用 GBK 渲染文字
- 你输入的 SQL(比如含中文)被 CMD 按 GBK 编码成字节发给 MySQL
- 但 MySQL 若把该连接的
character_set_client误判为utf8mb4,就会用 UTF-8 解码那串 GBK 字节 → 得到乱码
解决办法(二选一):
• 启动 CMD 后先运行:chcp 936(显式切回 GBK 编码),再执行 mysql -u root -p
• 或在连接时强制指定:mysql --default-character-set=gbk -u root -p(这会覆盖客户端握手时的自动协商)
⚠️ 注意:SET NAMES gbk 必须在每次连接后手动执行,且只对当前会话有效;它不能替代配置文件里的 character-set-server。
真正难处理的不是改配置,而是已有数据迁移:如果旧库是 utf8mb4,直接改 server 字符集不会转换存量表的定义,必须逐个执行 ALTER DATABASE db_name CHARACTER SET gbk COLLATE gbk_chinese_ci 和 ALTER TABLE t CONVERT TO CHARACTER SET gbk COLLATE gbk_chinese_ci,而这类转换在含 4 字节字符时会失败或截断 —— 这才是生产环境最常卡住的地方。










