一、(这个设置可能不生效,可以试试 方式二)
参考:
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

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

被折叠的 条评论
为什么被折叠?



