phpenv中修改mysql排序规则需手动编辑my.ini文件,在[mysqld]段落添加character-set-server=utf8mb4与collation-server=utf8mb4_zh_0900_as_cs,重启mysql服务后还需在建库、php连接及字段定义中显式指定utf8mb4相关配置,否则仍可能沿用默认排序规则。

phpEnv 里改 MySQL 排序规则,本质是改 MySQL 服务本身的配置,不是 phpEnv 界面点几下就能生效的——你得进配置文件手动调,否则新建库/表仍用默认 utf8mb4_0900_ai_ci 或旧版 utf8mb4_unicode_ci。
怎么找到并修改 phpEnv 的 MySQL 配置文件
phpEnv 是 Windows 下的集成环境,MySQL 配置文件通常是 my.ini,位置在:
- phpEnv 安装目录下的
mysql\bin\my.ini(最常见) - 或
phpEnv\mysql\my.ini(取决于版本打包方式) - 不确定时,打开 phpEnv 控制面板 → 点击 MySQL 行的「配置」按钮,它会自动打开对应
my.ini
找到 [mysqld] 段落,在下面添加或修改这两行:
character-set-server = utf8mb4 collation-server = utf8mb4_zh_0900_as_cs
⚠️ 注意:collation-server 必须与 character-set-server 兼容。别写 utf8mb4_bin 或 utf8_general_ci 这类不匹配的组合,MySQL 启动会失败或静默回退。
改完配置后必须重启 MySQL 服务
phpEnv 界面里点「重启 MySQL」或「停止→启动」,不是点「重载配置」——my.ini 中的 character-set-server 和 collation-server 是启动时读取的,运行中 reload 不生效。
验证是否生效,连上 MySQL 执行:
SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server';
输出值应和你写的完全一致。如果还是 utf8mb4_0900_ai_ci,说明:
- 配置文件路径错了,没改对那个被加载的
my.ini - 有多个
[mysqld]段落,写到了被忽略的位置 - MySQL 启动时加了
--defaults-file参数,强制指定了另一份配置
为什么只改服务器配置还不够?建库时仍要显式指定
即使 collation-server 设成了 utf8mb4_zh_0900_as_cs,执行 CREATE DATABASE mydb; 仍可能得到 utf8mb4_0900_ai_ci——因为 MySQL 8.0+ 默认 collation 已切换,collation-server 只影响「无显式声明时的兜底值」,但部分版本对新库仍优先用内置默认规则。
所以安全做法是:建库时务必写全:
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs;
否则后续 ORDER BY name 对中文排序不准(比如“张”排在“王”前面却按字节序乱排),或者 WHERE name = '李' 因大小写敏感性不一致而漏匹配。
PHP 连接层不设 utf8mb4,前面全白搭
phpEnv 装好 MySQL 并配对 collation,不代表 PHP 写进去的数据就自动按这个规则存。PDO 或 mysqli 若没声明客户端编码,连接建立后默认可能是 latin1 或 utf8(三字节伪 UTF-8),导致:
- 插入 emoji 报错
Incorrect string value - 中文查出来是
????或乱码 -
ORDER BY结果和预期不符(客户端排序规则覆盖了服务端)
PHP 连接必须带 charset=utf8mb4:
$pdo = new PDO('mysql:host=127.0.0.1;dbname=mydb;charset=utf8mb4', $user, $pass);
别信 SET NAMES utf8mb4 或 mysqli::set_charset() ——它们只是补救,不如 DSN 里直接写死可靠。漏这一步,你调再准的 collation-server 也没用。
真正容易被忽略的是字段级 collation:即使库、表、连接全设对了,某列定义时写了 VARCHAR(255) COLLATE utf8mb4_bin,那这一列就单独走二进制比较,WHERE 和 ORDER BY 都会脱离全局规则。检查用 SHOW CREATE TABLE xxx,别只看 SHOW VARIABLES。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











