一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何在phpMyAdmin中修改默认的字符集排序规则为utf8mb4

时间:2026-07-14 09:57:51 编辑:袖梨 来源:一聚教程网

phpMyAdmin 默认字符集不是 utf8mb4 是因为其本身不决定 MySQL 字符集,而是由 MySQL 服务端的 character_set_server 和 collation_server 配置决定;若未在 my.cnf/my.ini 的 [mysqld] 段中设置 character_set_server = utf8mb4 和 collation_server = utf8mb4_unicode_ci 并重启 MySQL,则新建数据库/表仍会默认使用 utf8(即 utf8mb3)。

phpMyAdmin 默认字符集为什么不是 utf8mb4?

phpmyadmin 本身不决定 mysql 的默认字符集,它只是个可视化工具。你看到的“默认字符集”实际来自 mysql 服务端配置(my.cnfmy.ini)中的 character_set_servercollation_server 设置。如果 phpmyadmin 新建数据库/表时仍用 utf8(即 utf8mb3),说明 mysql 启动时没正确加载 utf8mb4 配置。

修改 MySQL 服务端配置强制启用 utf8mb4

这是根本解法,否则 phpMyAdmin 每次新建对象都可能回退到旧编码。必须重启 MySQL 才生效:

  • 编辑 /etc/mysql/my.cnf(Linux)或 C:ProgramDataMySQLMySQL Server X.Xmy.ini(Windows)
  • [mysqld] 段落下添加两行:
    character_set_server = utf8mb4collation_server = utf8mb4_unicode_ci
  • 可选但推荐:同时加 skip-character-set-client-handshake 防止客户端乱设编码
  • 重启 MySQL:sudo systemctl restart mysql 或 Windows 服务管理器中重启

验证是否生效:登录 MySQL 执行 SHOW VARIABLES LIKE 'character_set_server';,结果应为 utf8mb4

phpMyAdmin 界面中临时切换新建表的排序规则

即使服务端已配好,phpMyAdmin 的“新建表”页面下拉菜单默认仍可能显示 utf8_general_ci —— 这是前端缓存或旧版本 UI 的遗留行为。操作时注意:

  • 新建数据库时,在“排序规则”下拉框里手动选择 utf8mb4_unicode_ci(不是 utf8_unicode_ci
  • 新建数据表时,不要依赖“默认排序规则”,务必在字段定义页单独为每个 VARCHAR / TEXT 字段设置 Collationutf8mb4_unicode_ci
  • 已有表需转换:选中表 → “操作”选项卡 → 在“排序规则”下拉框选 utf8mb4_unicode_ci → 勾选 更改所有列的排序规则 → 执行

为什么 utf8mb4_unicode_ci 比 utf8mb4_general_ci 更值得选?

utf8mb4_general_ci 是 MySQL 5.5.3 之前的旧排序规则,早已被弃用;它对 emoji、德语 ß、西班牙语 ñ 等处理不准确。而 utf8mb4_unicode_ci 基于 Unicode 4.0 标准,兼容性更好。MySQL 8.0+ 默认改用 utf8mb4_0900_ai_ci,但 phpMyAdmin 旧版本可能不列出它——所以优先选 utf8mb4_unicode_ci,别图省事点 utf8mb4_general_ci

立即学习“PHP免费学习笔记(深入)”;

真正容易被忽略的是:只改数据库/表级排序规则不够,字段级(尤其是 TEXT 类型)必须显式指定 collation,否则可能继承旧规则;另外,应用连接层(如 PHP 的 mysqli_set_charset() 或 PDO DSN 中的 charset=utf8mb4)也得同步配,否则照样存乱码。

热门栏目