MySQL字符集需服务端、建表语句、PHP连接三者统一为utf8mb4:修改my.ini中mysqld[mysql]三段配置,重启MySQL服务;PDO连接加;charset=utf8mb4,MySQLi调用set_charset("utf8mb4");建表显式声明DEFAULT CHARSET=utf8mb4。

phpEnv 本身不直接控制 MySQL 的字符编码,它只是个环境管理工具;真正决定乱码与否的,是 MySQL 实例启动时的配置、建表语句、PHP 连接时的 charset 设置这三者是否统一为 utf8mb4。只要其中一环漏掉,中文、emoji 或带重音符号的字符(比如 café)就会出问题。
MySQL 服务启动时必须加载 utf8mb4 配置
phpEnv 启动的 MySQL 默认用的是系统级 my.ini 或 my.cnf,但很多人没改过这个文件,导致 MySQL 内部仍按 latin1 启动。
- 找到 phpEnv 安装目录下的
mysql\my.ini(Windows)或mysql/my.cnf(Linux/macOS) - 在
[mysqld]段落下添加三行(不是注释!):[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci skip-character-set-client-handshake = true
- 在
[client]和[mysql]段落都加上:[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
- 重启 phpEnv 的 MySQL 服务(不是仅重启 Apache/Nginx)——否则配置不生效
PHP 连接 MySQL 时必须显式声明 utf8mb4
即使 MySQL 已设为 utf8mb4,PHP 默认连接仍可能走旧协议,尤其用 PDO 时若 DSN 里没写 charset,就会 fallback 到 latin1。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- PDO 连接必须带
charset=utf8mb4:$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass); - MySQLi 连接后必须立刻调用
set_charset():$mysqli = new mysqli("localhost", "user", "pass", "test"); $mysqli->set_charset("utf8mb4"); - 不要只依赖
mysqli_query($conn, "SET NAMES utf8mb4")—— 它不保证连接初始化阶段的字符集协商正确,且对预处理语句无效
建表语句必须指定 utf8mb4 字符集
哪怕 MySQL 全局设了 utf8mb4,新建表时若不显式声明,仍可能继承默认(尤其是通过 phpMyAdmin 或旧脚本创建的表)。
立即学习“PHP免费学习笔记(深入)”;
- 建表 SQL 必须包含:
CREATE TABLE `users` ( `id` INT PRIMARY KEY, `name` VARCHAR(255) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
- 已有表可批量修复:
ALTER TABLE `users` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 检查是否生效:
SHOW CREATE TABLE users;看输出里是否有DEFAULT CHARSET=utf8mb4
容易被忽略的坑:phpEnv 的 MySQL 版本与 utf8mb4 兼容性
phpEnv 常打包较老版本 MySQL(如 5.5 或 5.6),而 utf8mb4 在 MySQL 5.5.3+ 才完整支持,5.7+ 才默认启用。如果你用的是 phpEnv 自带的 MySQL 5.5.27,即使配了 utf8mb4,某些字段类型(如 TEXT)仍可能因索引长度限制报错。
- 运行
SELECT VERSION();确认实际 MySQL 版本 - 若低于 5.5.3,别硬上 utf8mb4 —— 升级 phpEnv 或换用 MariaDB 10.2+
- 若用 phpEnv + MariaDB,注意其默认配置文件路径可能是
mariadb/my.cnf,别改错位置


















