0

0

php数据库怎么进高版本mysql8_php连mysql8兼容法【教程】

蓮花仙者

蓮花仙者

发布时间:2026-01-25 19:24:03

|

675人浏览过

|

来源于php中文网

原创

PHP连MySQL 8默认失败,因MySQL 8启用caching_sha2_password认证插件,而PHP 7.2及更早版本的mysqlnd驱动不支持;PHP 7.4+需满足OpenSSL启用及驱动编译条件才支持。

php数据库怎么进高版本mysql8_php连mysql8兼容法【教程】

PHP 连 MySQL 8 默认会失败,核心原因是 MySQL 8 默认启用 caching_sha2_password 认证插件,而 PHP 7.2 之前版本(含 7.2)的 mysqlnd 驱动不支持它;即使 PHP 7.4+ 支持,也需满足 OpenSSL 和驱动编译条件,否则仍报 Authentication plugin 'caching_sha2_password' cannot be loaded

确认你的 PHP 版本和 mysqlnd 是否真正支持 caching_sha2_password

别只看 php -v,要查实际使用的驱动细节:

  • 运行 php -i | grep "mysqlnd",确认输出中包含 mysqlnd 7.4.0 or later(PHP 7.4+ 才内置支持)
  • 检查 openssl 扩展是否已启用:php -m | grep openssl —— 缺失则 caching_sha2_password 无法解密握手包
  • 若用 XAMPP/MAMP/WAMP,它们自带的 PHP 往往是旧编译版,mysqlnd 可能未启用 SHA2 支持,即使版本号够也不行

快速绕过认证问题:改 MySQL 用户认证方式(开发/测试首选)

对本地或测试库,最稳最快的办法不是升级 PHP,而是让 MySQL 8 降级认证方式,兼容老驱动:

  • 登录 MySQL 8:mysql -u root -p
  • 执行:ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
  • 刷新权限:FLUSH PRIVILEGES;
  • 注意:不能对 root@localhost 直接改(某些安装启用了 auth_socket),先确认当前插件:SELECT user,host,plugin FROM mysql.user WHERE user='your_user';

PHP 连接时显式指定 charset 和 auth_plugin(PHP 7.4+ 生产环境可用)

即使驱动支持,不显式设置仍可能因默认行为不一致出错:

Mulan AI
Mulan AI

画布式AI视频创作平台,轻松制作爆款视频

下载

立即学习PHP免费学习笔记(深入)”;

  • PDO 时,在 DSN 后加 ;charset=utf8mb4,并确保选项数组包含:PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  • mysqli 时,连接后立即执行:$mysqli->set_charset('utf8mb4');
  • 如果仍报认证错误,尝试在 DSN 中强制指定旧协议:mysql:host=localhost;port=3306;charset=utf8mb4(不带 ssl 参数,除非你真配了有效证书)
  • 避免使用 mysql_connect() —— 它在 PHP 7.0+ 已被移除,且完全不支持 MySQL 8 认证

docker 或生产环境:MySQL 8 配置文件级兼容(一劳永逸)

如果你控制 MySQL 服务本身(如自建容器或云数据库参数可调),可在启动时统一降级认证方式:

  • 修改 my.cnfmysqld.cnf,在 [mysqld] 段下添加:default_authentication_plugin=mysql_native_password
  • Docker 启动时传参:--default-authentication-plugin=mysql_native_password
  • 重启 MySQL 后,所有新建用户默认用 mysql_native_password;已有用户仍需手动 ALTER USER,这点常被忽略

真正麻烦的不是“连不上”,而是连上后执行 SELECT 拿到乱码、或 INSERTIncorrect string value —— 这说明 charset 没对齐,比认证问题更隐蔽。务必验证连接后 SHOW VARIABLES LIKE 'character_set%' 和 PHP 端实际发送的编码是否一致。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2882

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1706

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1561

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1078

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1525

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1277

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1649

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1309

2023.11.13

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

45

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 810人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号