PHP连接MySQL 8.0报错

知数堂推了两期关于MySQL 8.0的公开课 https://zst.ke.qq.com/ ,很多程序员,也按耐不住了,要升级到MySQL 8.0. PHP是世界上最好的语言。 骚年肯定也不会落后。但升级到MySQL 8.0后,马上面监到两个问题。

  1.  PHP连接上MySQL。 同样的程序 MySQL 5.7没事,换了MySQL8.0 报: Access Denied for user ‘XXXX’
  2.  Server sent charset (255) unknown to the client. Please, report to the developers in … on line X . 不识别字符集

人生艰难,再次打击我们PHP程序员。 好吧! MySQL 8.0 发生重大变革了:

1. 认证方法更新为了: caching_sha2_password
2. 字符集改成了默认: utf8mb4

据说字符集的已经在php-7.20 支持了。 不过升级PHP也不容易。 我们先几个兼容支持方法吧。

关于认证和字符集兼容:

1. 配置文件[mysqld]部分

[mysqld]
default_authentication_plugin=mysql_native_password
character_set_server =utf8

上面这两个配置,把MySQL 8.0 认证更改成老的方法,字符集更改成原来的:utf8.

2. 创建基于native_password的帐号

CREATE USER 'wubx'@'%' IDENTIFIED WITH mysql_native_password BY 'zstzst';
GRANT ALL PRIVILEGES ON *.* TO 'wubx'@'%';

3. 创建DB

CREATE DATABASE IF NOT EXISTS `zst` COLLATE 'utf8_general_ci' ;
show create database zst;

确认字符集是utf8.

 

4. 使用我们新创建的帐号连接zst,应该万事Ok。 如果遇到其它问题,欢入裙交流

 

作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.