错误原因
这个错误是 MySQL 5.7+ 版本中最常见的兼容性问题之一。ONLY_FULL_GROUP_BY 是 MySQL 的严格模式要求,确保 GROUP BY 查询的语义明确。
具体原因:
-
SELECT 列表中的列不在 GROUP BY 子句中
-
且这些列也不是聚合函数的参数
-
MySQL 无法确定从分组中的哪行返回这些列的值
解决的办法可以改sql,也可以改sql服务的conf配置, 但是如果你项目用的是mybatis-plus插件 , 就可以用我介绍的很简单的方法。
在项目增加一个configure配置类:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加自定义拦截器
interceptor.addInnerInterceptor(new SqlModeInterceptor());
return interceptor;
}
static class SqlModeInterceptor implements InnerInterceptor {
@Override
public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
try {
// 设置会话 SQL_MODE
Statement stmt = connection.createStatement();
stmt.execute("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
然后重启项目就可以了。