MySQL 8.0.26起报“utf8 is deprecated”警告,因utf8实为utf8mb3别名,未来将重定向为utf8mb4,易致建表与连接行为不一致;必须修改配置文件中character-set-server=utf8mb4并配collation-server=utf8mb4_unicode_ci,否则初始化阶段持续报错。

为什么安装时会报 'utf8' is deprecated 警告
这不是错误,而是 MySQL 从 8.0.26 开始正式发出的弃用提醒:当前配置里的 utf8 实际指向 utf8mb3(最多 3 字节),但未来版本中它将被重定向为 utf8mb4。这个别名歧义会导致建表、连接、迁移行为不一致——比如你写 CHARSET=utf8,MySQL 8.0 可能按 utf8mb3 解析,而 8.1+ 会按 utf8mb4 解析,中间一环错,数据就存歪了。
必须改配置文件里的 character-set-server
只在 SQL 里执行 SET character_set_server = utf8mb4 或临时改连接参数,对安装阶段无效。初始化命令(如 mysqld --initialize)读的是配置文件,不是运行时变量。
- Linux 下打开
/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf;Windows 下是my.ini - 在
[mysqld]段下,把character-set-server=utf8改成character-set-server=utf8mb4 - 同时加上
collation-server=utf8mb4_unicode_ci(别漏,否则默认用utf8mb4_0900_ai_ci,旧客户端可能不认) - 删掉或注释掉
[client]和[mysql]段里的default-character-set=utf8,统一用utf8mb4
ALTER DATABASE 和 CONVERT TO 不解决安装警告
这类 SQL 是针对已存在的库/表,而警告发生在服务启动前的初始化阶段。就算你后续把所有表都转成 utf8mb4,只要配置文件里还写着 utf8,下次重装或重初始化照样报。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
ALTER DATABASE db_name CHARACTER SET utf8mb4只影响新创建的表,不修复初始化逻辑 -
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4对历史数据编码转换有效,但和安装警告无关 - 如果已经初始化失败,先删掉 data 目录再重试,否则配置改了也进不去
验证是否真正生效
重启服务后不要只看 SHOW VARIABLES LIKE 'character_set_server',那只是运行时结果。关键要看初始化日志:
- 执行
mysqld --initialize --console时,输出里不再出现Warning: 'utf8' is currently an alias... - 连上后运行
SHOW VARIABLES LIKE 'character_set%',确认character_set_server和character_set_database都是utf8mb4 - 新建一个库不指定字符集:
CREATE DATABASE test;,然后SHOW CREATE DATABASE test;,看到默认DEFAULT CHARSET=utf8mb4才算到位
最易忽略的点:Windows 用户常改了 my.ini 却没注意 MySQL 实际加载的是另一个路径下的配置(比如 ProgramData 下的副本),务必用 mysqld --verbose --help | grep "Default options" 确认真实读取路径。

















