上一篇文章 提到的需求上线后出现如下报错:
org.springframework.jdbc.BadSqlGrammarException:
… Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘p.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
经过调研发现线上的mysql使用的是5.7版本,默认是开启ONLY_FULL_GROUP_BY
ONLY_FULL_GROUP_BY模式代表什么?为什么5.7版本要默认开启该模式呢?如何解决这个问题呢?带着这些问题开始了探索。
- ONLY_FULL_GROUP_BY模式代表什么?
根据报错信息我们知道它是sql_mode的一个值,sql_mode的常用值如下,第一个便是我们关注的ONLY_FULL_GROUP_BY。
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默