错误日志部分:
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
查看sql_mode SQL语句:
SELECT @@SESSION.sql_mode;
或者
select @@GLOBAL.sql_mode;
查询内容如下 :
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
在MySQL 8.0的默认SQL模式包括以下模式:
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO ,NO_ENGINE_SUBSTITUTION
MySQL 8.0 已经没有 NO_AUTO_CREATE_USER 模式了
很多博客里面都是针对8.0以下的版本设置的 设置完才发现 为啥我的mysql 启动报错了
MySQL 8.0以下支持模式:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
错误解决方案:
- 运行时更改SQL模式:
GLOBAL全局模式
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SESSION模式
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
设置GLOBAL变量需要 SYSTEM_VARIABLES_ADMIN 特权 (不建议使用SUPER权限) ,并且会影响从那时起连接的所有客户端的操作。
设置SESSION 变量仅影响当前客户端。每个客户端都可以随时更改其会话sql_mode
- 修改my.cnf 配置文件
linux文件位置: /etc/mysql
vim my.cnf
在里面添加如下内容(MySQL 8.0 示例)
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
修改完需要重启mysql 才能生效