ThinkPHP5.0.24支持MySQL8,需三步协同:①MySQL用户认证插件改为mysql_native_password;②database.php中hostname设为127.0.0.1、charset为utf8mb4、prefix为空字符串;③启用pdo_mysql和mysqli扩展并用原生PHP验证连通性。

ThinkPHP5.0.24 本身支持 MySQL8,但默认配置和底层驱动兼容性需手动调整,否则会卡在连接失败、认证拒绝或字符集报错。它不是框架版本不支持,而是 PHP 环境、MySQL 服务端配置、以及 TP5 的 database.php 写法三者要协同。
MySQL8 认证插件必须改用 mysql_native_password
MySQL 8.0+ 默认使用 caching_sha2_password 插件,而 TP5.0.24(基于较老 PDO/MySQLi 扩展)多数不识别该插件,直连时会报:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
解决方法:进 MySQL 命令行执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;
确认生效:
立即学习“PHP免费学习笔记(深入)”;
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
结果中 plugin 列必须显示 mysql_native_password。
database.php 配置必须显式写 127.0.0.1,别写 localhost
Windows 下 localhost 可能触发命名管道或 IPv6 回环,导致连接超时或认证失败。TP5.0.24 的 PDO 连接对这个很敏感。
打开 application/database.php(或 config/database.php,依项目结构而定),关键项设为:
-
'hostname' => '127.0.0.1' -
'hostport' => 3306(不要留空或写字符串) -
'charset' => 'utf8mb4'(MySQL8 默认字符集,避免乱码) -
'prefix' => ''(如无前缀,务必为空字符串,不是 null)
示例片段:
return [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'your_db_name',
'username' => 'root',
'password' => 'your_password',
'hostport' => 3306,
'charset' => 'utf8mb4',
'prefix' => '',
];PHP 必须启用 pdo_mysql 和 mysqli 扩展
TP5.0.24 默认走 PDO,但部分调试或模型操作可能回退到 mysqli。检查 phpinfo() 或运行:
php -m | findstr "pdo_mysql mysqli"
若缺失,需在 php.ini 中取消注释:
extension=php_pdo_mysql.dll extension=php_mysqli.dll
然后重启 Web 服务(Apache/Nginx)或 phpEnv。
先绕过框架,用原生代码验证 MySQL 是否真通
建一个 test_mysql.php 放在网站根目录:
<?php
$mysqli = new mysqli('127.0.0.1', 'root', 'your_password', 'your_db_name', 3306);
if ($mysqli->connect_error) {
die('Connect Error: ' . $mysqli->connect_error);
}
echo 'OK, MySQL 8 is reachable via native driver';
$mysqli->close();
?>浏览器访问该文件,输出 OK 才代表底层链路没问题——这步省掉,后面所有 TP5 报错都难定位。
不复杂但容易忽略



















