mybatis-plus插件解决sql报错:this is incompatible with sql_mode=only_full_group_by ”

错误原因

这个错误是 MySQL 5.7+ 版本中最常见的兼容性问题之一。ONLY_FULL_GROUP_BY 是 MySQL 的严格模式要求,确保 GROUP BY 查询的语义明确。

具体原因:

  1. SELECT 列表中的列不在 GROUP BY 子句中

  2. 且这些列也不是聚合函数的参数

  3. 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();
            }
        }
    }
}

然后重启项目就可以了。

相关推荐
雷工笔记7 分钟前
用AI解决SQL语句解析及语法转换问题
数据库·sql
研究点啥好呢12 分钟前
华为数据分析工程师面试题精选:10道高频考题+答案解析
python·sql·面试·求职招聘
雷工笔记12 分钟前
用AI快速解决SQL报错问题1064
数据库·sql
摇滚侠13 分钟前
Public Key Retrieval is not allowed
java·数据库·mysql
猫的玖月18 分钟前
(四)SQL-DDL
数据库·sql·oracle
冷小鱼19 分钟前
Redis 技术全景解析:从缓存基石到 AI 时代的数据引擎
数据库·redis·缓存
猫的玖月20 分钟前
(三)SQL-DML
数据库·sql
田井中律.20 分钟前
neo4j图数据库安装教程(windows)
数据库·neo4j
p@ssword21 分钟前
解决idea-2025.3.3重启项目/停止项目要点两次问题才生效问题
javascript·数据库·intellij-idea
iwS2o90XT21 分钟前
仿写一个简化版Redis,理解内存数据库
数据库·redis·缓存