答案是修改MySQL服务端认证插件为mysql_native_password并更新配置文件。需在phpEnv的MySQL CLI中执行ALTER USER命令切换root用户认证方式(含@'localhost'和@'%'),执行FLUSH PRIVILEGES生效,并将my.ini中default_authentication_plugin改为mysql_native_password,保存为UTF-8无BOM编码后重启MySQL服务。

phpEnv 里 MySQL 8.x 连不上,报 1251- Client does not support authentication protocol requested by server,直接改服务端认证插件就行,不用换客户端或重装环境。
确认当前用户用的是 caching_sha2_password
进 phpEnv 自带的 MySQL 命令行(通常在 phpEnv 控制面板点「MySQL CLI」或手动运行 mysql -u root -p),执行:
SELECT host, user, plugin FROM mysql.user WHERE user = 'root';
如果看到 plugin 列是 caching_sha2_password,就坐实了问题根源——phpEnv 默认启用 MySQL 8+ 的新认证方式,但旧版 PHP 扩展(如 mysqlnd 低版本)或部分连接工具不认它。
用 ALTER USER 切回 mysql_native_password
执行以下命令(注意替换实际用户名和密码):
立即学习“PHP免费学习笔记(深入)”;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';- 如果 phpEnv 允许远程连接(比如你用 Navicat 连本地 phpEnv 的 MySQL),还得补一句:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 必须加
FLUSH PRIVILEGES;生效
别漏掉 @'localhost' 和 @'%' 两个 host —— phpEnv 启动的 MySQL 通常同时监听这两个,只改一个会导致部分连接仍失败。
phpEnv 环境下还要检查 my.ini 的默认插件配置
phpEnv 的 MySQL 配置文件(一般在 phpEnv\MySQL\my.ini 或类似路径)里,可能有这行:
default_authentication_plugin=caching_sha2_password
把它改成:
default_authentication_plugin=mysql_native_password
改完重启 phpEnv 的 MySQL 服务。否则下次初始化新用户,还是会默认用 caching_sha2_password,白改一次。
真正容易被忽略的是:phpEnv 多数基于 Windows,my.ini 文件编码要是 ANSI 或 UTF-8 无 BOM,用记事本改完保存时选错编码会导致 MySQL 启动失败;还有就是改完配置后必须手动重启服务,光刷新页面没用。



















