mysql8.0 this is incompatible with sql_mode=only_full_group_by

在MySQL 8.0中遇到'ONLY_FULL_GROUP_BY'错误,该错误表示查询不兼容当前的SQL模式。文章介绍了如何查看SQL模式,以及8.0之前的模式区别。解决方案包括运行时更改SQL模式和修改my.cnf配置文件,添加特定的sql-mode设置,最后需要重启MySQL服务以使更改生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误日志部分:

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_BYSTRICT_TRANS_TABLESNO_ZERO_IN_DATENO_ZERO_DATEERROR_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 才能生效 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值