为了解锁最香新功能,我直接升级到了最新的Mysql 8.0.19版本: [yejr@imysql.com]> s .. Using delimiter: ; Server version: 8.0.19 mysq
为了解锁最香新功能,我直接升级到了最新的Mysql 8.0.19版本:
[yejr@imysql.com]> s
..
Using delimiter: ;
Server version: 8.0.19 mysql CommUnity Server - GPL)
Protocol version: 10
...
Binary data as: Hexadecimal
注意到上面的 Binary data as: Hexadecimal 了吗,我前几天的文章 MySQL 8.0.19客户端的一个小变化 中介绍了这个新特性。
由于我的PHP还是相对较低的版本,Mysql 8.0相对于5.7版本,对php这些应用程序影响最大的就是账号认证方式,由此前的 mysqlnativepassword 变成了 cachingsha2password。除了账号授权方式要保持使用 native 认证插件外,还有个要注意的默认使用的字符集还得保持用 utf8,否则可能会报告下面两种错误:
SQLSTATE[HY000] [2054] Server sent charset unknown to the client
或者是
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
看到上面的报错不用慌,只需要修改下面两个MySQL参数即可:
#MySQL 8.0起默认字符集改成了utf8mb4,这造成PHP PDO连接报错
#只需要重新指定默认字符集为utf8即可,但这并不影响在MySQL里创建utf8mb4字符集的表
character-set-server = utf8
#指定账号认证plugin还使用native模式,否则PHP PDO连接握手时会报错
default_authentication_plugin = mysql_native_passWord
在MySQL 8.0下创建新账号时,需要先 CREATE USER 并指定密码,然后再 GRANT 授权,不能再像以前那样,可以直接用一条 GRANT 语句搞定 创建账号+指定密码+授权 这三件事了,例如:
[yejr@imysql.com]> CREATE USER yejr@localhost identified with mysql_native_password by "c97721c63c9fc077";
[yejr@imysql.com]> GRANT ALL ON yejr.* to yejr@localhost;
把MySQL从5.7到8.0的升级方案,建议如下:
在升级过程中,我还发现如果使用drupal系统的话,可能还会有个报错:
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1231 Variable "sql_mode" can"t be set to the value of "NO_AUTO_CREATE_USER" in lock_may_be_available() (line 167 of xx/includes/lock.inc).
那是因为在drupal代码中,连接mysql时顺便设置了SQLMODE,其中 NOAUTOCREATEUSER 这个模式在8.0之后不复存在了,只需要微调下面的代码:
[root@yejr.me]# vim includes/database/mysql/database.inc
$connection_options["init_commands"] += array(
#注释掉本行代码,或者删除 NO_AUTO_CREATE_USER 模式即可
#"sql_mode" => "SET sql_mode = "ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"",
"sql_mode" => "SET sql_mode = "ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO"",
);
好了,现在全站都升级到MySQL 8.0了,yeah✌️
enjoy MySQL 8.0。
全文完
由我主讲的知数堂「MySQL优化课」第17期已发车,我们的课程从第15期就升级成MySQL 8.0版本了,现在上车刚刚好,一起开启MySQL 8.0的修行之旅吧
另外,我在腾讯课堂《MySQL性能优化》精编课程已完结,本课程讲解读几个MySQL性能优化的核心要素:合理利用索引,降低锁影响,提高事务并发度。
--结束END--
本文标题: PHP连接MySQL 8.0报错的解决办法
本文链接: https://lsjlt.com/news/5802.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0