写BUG的派大星

Patrick Star

  • 首页
  • 归档

  • 搜索
设计模式 Gis Kafka Druid 微信小程序 Java 开源项目源码 物体识别 机器学习 Mybatis 微服务 Feign OpenVPN CSS Streamsets CDH SpringCloud SpringBoot maven 分布式 Shell Tree Linux js WebSocket 多线程 集群 Hadoop 大数据 JDK ElasticSearch MySQL 数据库 Redis Http Nginx

解决MySQL"SELECT list is not in GROUP BY"

发表于 2020-07-15 | 分类于 数据库 | 0 | 阅读次数 2503

问题原因

出现这个问题主要是因为MySQL5.7默认开启的SQL校验中有ONLY_FULL_GROUP_BY。

在此模式下,如果使用了group by进行查询,那么select所查询的列只能是以下几种情况:

  1. group by后面的。
  2. SUM、MAX、MIN等聚合函数。

也就是说,对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

如果使用select name from student group by age;这种语句就会报错。

即使表中可能根据age分组以后并没有重复的name值,但是也会报错。

解决方法

临时解决,重启MySQL失效

先查询当前的sql_mode;

使用select @@sql_mode查询并复制当前值,将其中的ONLY_FULL_GROUP_BY去掉,然后使用set global sql_mode='新值'进行设置(同理,set session sql_mode设置为当前会话生效)

修改配置文件,永久生效

修改my.cnf文件(一般在安装目录下,如果使用yum安装可能是/etc/my.cnf,windows系统中为my.ini)

在其中[mysqld]下,修改或增加一行sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
此处的配置也可根据上面的select @@sql_mode的值来定,根据实际场景进行修改即可。

说明

如果遇到生产环境不可以重启MySQL,可以同时采用上述两种方法,先临时生效,再等重启后永久生效。

  • 本文作者: Patrick
  • 本文链接: https://www.write1bug.cn/archives/解决mysqlselectlistisnotingroupby
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 设计模式 # Gis # Kafka # Druid # 微信小程序 # Java # 开源项目源码 # 物体识别 # 机器学习 # Mybatis # 微服务 # Feign # OpenVPN # CSS # Streamsets # CDH # SpringCloud # SpringBoot # maven # 分布式 # Shell # Tree # Linux # js # WebSocket # 多线程 # 集群 # Hadoop # 大数据 # JDK # ElasticSearch # MySQL # 数据库 # Redis # Http # Nginx
Python3报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position"
SpringBoot中@RequestBody的对象属性第二个字母大写,反序列化失败
  • 文章目录
  • 站点概览
Patrick

Patrick

不是在改BUG,就是在写BUG。

52 日志
9 分类
36 标签
RSS
E-mail
Creative Commons
© 2018 — 2023 Patrick
人生如逆旅|我亦是行人
鲁ICP备18043140号-1