答案:需修改phpenv内置mysql的my.ini文件,在[mysqld]段添加character-set-server=utf8mb4和collation-server=utf8mb4_unicode_ci,重启mysql服务,并在php连接时显式设置charset=utf8mb4,同时确保mbstring扩展启用。

phpEnv 是 Windows 下轻量级 PHP+MySQL 环境集成包,但默认 MySQL 配置仍用 utf8(即 utf8mb3),不支持 emoji 和部分生僻汉字,写入中文显示为 ??? 或 æäº›å —— 这不是 PHP 脚本问题,而是 phpEnv 自带的 MySQL 服务端未启用完整 UTF-8 支持。
修改 phpEnv 内置 MySQL 的 my.ini 配置文件
phpEnv 的 MySQL 配置文件位于 phpEnv\mysql\my.ini(路径以你实际安装位置为准)。直接编辑该文件,在 [mysqld] 段下添加或修正以下几行:
character-set-server=utf8mb4collation-server=utf8mb4_unicode_ci- 删除或注释掉已废弃的
default-character-set=utf8(它在 MySQL 5.5.3+ 已被弃用,且只作用于客户端段)
⚠️ 注意:[client] 和 [mysql] 段无需改字符集,phpEnv 启动的命令行客户端默认继承 [mysqld] 设置;但若你手动用 mysql.exe -u root 登录,建议也加一句 default-character-set=utf8mb4 到 [client] 段,避免临时连接出错。
重启 phpEnv 并验证 MySQL 服务端字符集
改完配置后必须完全退出 phpEnv 控制面板并重新启动 MySQL 服务(不能只“重启”,要“停止→再启动”)。然后连上 MySQL 执行:
SHOW VARIABLES LIKE 'character_set_server';
返回值必须是 utf8mb4。如果仍是 utf8,说明配置没生效,常见原因有:
- 编辑的是错误路径下的
my.ini(比如改了系统目录或 MySQL 安装目录里的,而非 phpEnv 自带的那个) - MySQL 启动时读取了其他配置文件(可通过
mysql --help | grep "Default options"查看加载顺序) - 配置项写在了错误 section 下(比如写进了
[php]或空行后)
新建数据库和表时显式指定 utf8mb4
即使服务端设为 utf8mb4,phpEnv 创建的旧库/表仍可能沿用历史编码。新项目务必手动指定:
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE users (id INT, name VARCHAR(100)) CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
已有表转换需执行:
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
⚠️ 生产环境操作前必须备份:该语句会重建表,若原字段是 latin1 编码,直接转可能把字节当乱码重解释,造成不可逆损坏。
PHP 连接时仍要设 charset=utf8mb4
phpEnv 的 MySQL 默认监听 3306,但 PHP 连接层不会自动继承服务端设置。mysqli 或 PDO 必须显式声明:
- mysqli:
$mysqli->set_charset('utf8mb4');(比query("SET NAMES utf8mb4")更可靠) - PDO DSN 中必须写死:
mysql:host=127.0.0.1;dbname=mydb;charset=utf8mb4 - 即使 DSN 里写了
charset,PDO 构造后仍建议加一句:$pdo->exec("SET NAMES utf8mb4");,防止某些版本驱动忽略 DSN 参数
最容易被忽略的一点:phpEnv 自带的 PHP 版本(尤其老版 7.2/7.3)默认没开 mbstring 扩展,而 set_charset() 在某些 Windows + mysqli 组合下依赖它。检查 phpinfo() 是否有 mbstring 模块,没有就去 phpEnv\php\php.ini 解开 ;extension=mbstring 前的分号。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











