当前位置: 首页 > 后端技术 > PHP

PHP与Mysql8不兼容总结

时间:2023-03-29 17:33:23 PHP

安装完Mysql8.0后,我们需要用我们原来的PHP工作。但是,原本兼容Mysql5.1的代码突然报错。似乎需要做一些额外的工作。错误:PDO::__construct():服务器发送的字符集(255)客户端未知。求开发者反馈根据网上资料,是因为Mysql8.0把默认字符集改成了utfmb4,所以和客户端(不仅是PHP)通讯不被识别,需要把my.cnf改成指定字符集。[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]collat??ion-server=utf8_unicode_cicharacter-set-server=utf8error:PDO::__construct():服务器请求身份验证方法未知client[caching_sha2_password]根据网上资料,是用户身份认证的加密方式不兼容导致的。mysql8.0中默认的方式是caching_sha2_password,这就造成了老版本的兼容问题。老版本的加密方式是mysql_native_password。我们可以指定加密方式来设置:#创建新用户,使用旧的加密方式设置密码CREATEUSERusername@localhostidentifiedwithmysql_native_passwordby'password';#更新现有账号密码加密方式alteruser'root'@'%'identifiedwithmysql_native_passwordby'password';但更好的方法是添加一行默认配置:[mysqld]default_authentication_plugin=mysql_native_passworderror:Accessdeniedforuser'root'@'localhost'(usingpassword:YES)mysql>GRANTALLPRIVILEGESON*.*TO'oss'@'%';ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES)当我给其他用户添加权限时,报错没有权限,原因是我不小心删除了root用户。虽然网上有很多文档解决这个问题,但是我重建的root用户有grant_priv:y但是还是不能成功分配权限。我头疼。解决方法:重新安装,参考文章安装Mysql8.0。总结mysql8.0的新特性。我没有详细查看文档,但是兼容性让我很吃力。幸运的是,在解决了这3个问题后,我的PHP程序就成功运行了。接下来,我将把PHP5.1升级到PHP7。参考资料PDO::__construct():服务器发送的字符集(255)客户端未知。请向开发人员报告:https://stackoverflow.com/que...PDO::__construct():服务器请求客户端未知的身份验证方法[caching_sha2_password]:https://stackoverflow.com/que...安装Mysql8.0:https://segmentfault.com/a/11...