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

然后重启项目就可以了。

相关推荐
ltl1 分钟前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl15 分钟前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
麻瓜code1 小时前
【Mysql】重新学一遍 SQL 执行顺序
数据库·sql
这个DBA有点耶2 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
安_3 小时前
RAG的向量数据库:为LLM提供语义搜索能力
数据库
喜欢的名字被抢了4 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
这个DBA有点耶4 小时前
3000万个应用共享一套数据库:多租户“逻辑表”架构是如何做到的?
数据库·架构·dba
测试运维日常笔记4 小时前
Oracle 数据库连接认证方式详解
数据库·oracle
ClouGence5 小时前
PostgreSQL 同步到 Iceberg:开源、私有部署与 SaaS 方案对比
数据库·postgresql·开源
这个DBA有点耶5 小时前
DBA进阶之路:从“修数据库”到“管架构债”
数据库·架构·dba