在使用 MySQL 8.0 的过程中,碰到一些坑,记录一下。

账号密码加密策略

MySQL 8.0 修改了账号密码加密策略,默认的认证插件由 mysql_native_password 更改成了 caching_sha2_password,导致一些可视化工具无法连接数据库。如果需要,可以修改默认的策略或者账号密码的认证策略。

查询当前账号密码加密策略:

1
show variables like '%default_authentication_plugin%'

方式1:配置文件中添加,让 MySQL 使用原密码策略(需要重启 MySQL)。

1
2
[mysqld]
default_authentication_plugin = mysql_native_password

方式2:执行 SQL 修改某个账号密码验证策略

1
2
3
4
5
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 
-- 更新用户密码
ALTER USER '账号'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
-- 刷新权限
FLUSH PRIVILEGES;

授权用户账号语法变更

创建用户的操作已经不支持 grant 的同时创建用户方式,需要先创建用户再进行授权。

1
2
3
4
5
6
7
-- 旧的语法
mysql> grant all on *.* to 'admin'@'%' identified by 'admin';

-- 新的语法
mysql> create user 'admin'@'%' identified by 'admin';
mysql> grant all on *.* to 'admin'@'%' ;
mysql> flush privileges;

字符集变更

MySQL 8.0 默认字符集由 latin1 修改为 utf8mb4

GROUP BY

在 MySQL 8.0 以前,如果 GROUP BY 中没有指定排序,则默认按照 ASC 排序。或者你可以指定禁止排序 ORDER BY NULL

MySQL 8.0 GROUP BY 语句不再隐式添加排序(忽略再 GROUP BY 中的排序命令,如 DESC、ASC)。

更完善的 JSON 支持

参考资料

来,看看MySQL 5.6, 5.7, 8.0的新特性