MySql 使用groupby报错 sql_mode=only_full_group_by

本文介绍如何在MySQL中禁用ONLY_FULL_GROUP_BY模式,包括临时修改、会话级修改及永久修改的方法,适用于不同场景的需求。

一、(这个设置可能不生效,可以试试 方式二)

参考:

https://blog.youkuaiyun.com/liuyunshengsir/article/details/79525031

1. 
-- 查询全局 sql_mode,去掉ONLY_FULL_GROUP_BY
select @@sql_mode;
-- 执行结果 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


2. 分两种情况

-- 已存在的数据库,在当前库下执行修改命令(对已存在的数据库有效)
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

-- 新建的数据库,需要修改全局sql_mode(对新建的数据库有效)
set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 

二、

参考 https://blog.youkuaiyun.com/spirit_8023/article/details/83105030

 1. 查看原sql_mode值

-- mysql分别执行一下两个命令,查看两个执行结果
SHOW SESSION VARIABLES;

SHOW GLOBAL VARIABLES;

-- 查询结果中可以查看到 sql_mode的值为:
-- 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

2.修改sql_mode


-- 执行更新上述两个配置中的sql_mode值(删除原数据中的ONLY_FULL_GROUP_BY)
set session sql_mode= 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 

三、

每次重启电脑或mysql都提示sql_mode=only_full_group_by的错误信息比较烦,想一劳永逸,需要修改配置文件并重启mysql:

以linux为例,编辑 /etc/my.cnf 文件,搜索sql_mode关键字,有则修改,无则添加(sql_mode配置需要放在[mysqld]节点下):

# 解决 group_by 查询语句报错问题: sql_mode=only_full_group_by
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 

修改并重启mysql前后配置对比:

https://www.cnblogs.com/52lnamp/p/9294330.html

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值