MySQL PHP with MySQL 8.0+ 错误:服务器请求客户端未知认证方法

MySQL PHP with MySQL 8.0+ 错误:服务器请求客户端未知认证方法

在使用MySQL 8.0版本及以上的时候,经常会出现以下错误信息:

MySQL Connection Failed: The server requested authentication method unknown to the client
Mysql

这是因为MySQL 8.0以上版本默认使用的是caching_sha2_password加密方式,而PHP的mysqli扩展和PDO_MySQL扩展并不支持这种加密方式,只支持mysql_native_password。

以下是两种解决方案:

阅读更多:MySQL 教程

方案一:更改MySQL用户的加密方式

可以通过以下命令更改MySQL用户的加密方式:

ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Mysql

比如:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Mysql

方案二:在PDO中指定加密方式

可以在PDO中指定使用mysql_native_password加密方式,具体代码如下:

try {
    dbh = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'", PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
        PDO::MYSQL_ATTR_SSL_KEY => './client-key.pem',
        PDO::MYSQL_ATTR_SSL_CERT => './client-cert.pem',
        PDO::MYSQL_ATTR_SSL_CA => './ca-cert.pem'
        ));
} catch (PDOExceptione) {
    echo 'MySQL Connection Failed: ' . $e->getMessage();
}
PHP

其中PDO::MYSQL_ATTR_INIT_COMMAND用于设置编码格式,PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT用于是否开启SSL验证,而PDO::MYSQL_ATTR_SSL_KEY、PDO::MYSQL_ATTR_SSL_CERT、PDO::MYSQL_ATTR_SSL_CA用于设置SSL认证的证书。

以上就是针对MySQL PHP with MySQL 8.0+错误的解决方案,希望能够对大家有所帮助。

总结

在使用MySQL 8.0以上版本时,由于默认使用的是caching_sha2_password加密方式,因此会出现MySQL PHP with MySQL 8.0+错误。通过更改MySQL用户的加密方式或在PDO中指定使用mysql_native_password加密方式,可以很好地解决这个问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册