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

然后重启项目就可以了。

相关推荐
Tangcan-几秒前
【MySQL】 事务
数据库·mysql·adb
卡布叻_星星36 分钟前
达梦数据库笔记之解决默认模式与当前表所属模式不匹配
数据库
xuefuhe38 分钟前
PostgreSQL default_statistics_target参数详解
数据库·postgresql
码界奇点40 分钟前
基于Django的超市管理系统设计与实现
数据库·python·django·sqlite·毕业设计·源代码管理
Aloudata1 小时前
数据工程指南:指标平台选型避坑与 NoETL 语义编织技术解析
sql·数据分析·自动化·etl·指标平台
invicinble1 小时前
Mysql的全域认识
数据库·mysql
OceanBase数据库官方博客1 小时前
DeepK 自动程序修复框架论文——OceanBase 校企联合研究
数据库·oceanbase·分布式数据库
AC赳赳老秦1 小时前
DeepSeek一体机部署:中小企业本地化算力成本控制方案
服务器·数据库·人工智能·zookeeper·时序数据库·terraform·deepseek
秦时明月之君临天下1 小时前
MySQL标识符长度限制
数据库·mysql
三水不滴1 小时前
Redis 故障转移:哨兵vs集群
数据库·经验分享·redis·缓存·性能优化