数据库升级到5.7.21后,一个正常的分组后按日期排序,并返回数据的语句开始报错:

语句如下:

SELECT id,title,add_time FROM `message` GROUP BY add_time ORDER BY add_time DESC;

异常如下:

错误代码: 1055
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'miniodb.nhb_message.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

出现这个异常的原因是MYSQL5.7.5之后开启了原来默认关闭的SQL mode:ONLY_FULL_GROUP_BY.开启这个模式会造成mysql拒绝查询非聚合操作列,即没有通过group by进行分组的列,无法直接在select,having,order by条件下使用;

解决方式有三种:

1 直接将版本降级到5.7.5以下,简单粗暴,但就是有点low;

2 使用ANY_VALUE()方法显示非聚合列;这个方法将聚合操作还原为5.7.5之前版本;

  使用方式:

SELECT ANY_VALUE(id),ANY_VALUE(title),add_time FROM `message` GROUP BY add_time ORDER BY ANY_VALUE(add_time) DESC;

3 最终,如果没有替代方法,再修改SQL mode;

# 修改
SET GLOBAL sql_mode = 'modes'; #需要超级权限,会影响修改后的所有连接客户端
SET SESSION sql_mode = 'modes'; #只影响当前客户端,可以随时修改
# 查询
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

修改SQL mode会影响用户分区表:

如果在分区表中有数据的情况下,修改SQL mode会导致表行为发生重大变化,可能导致数据损坏或丢失.官方建议在使用用户分区表后,不要修改SQL mode;

主从复制情况下,要注意保证主从服务器的SQL mode一致;

参考文档:

  MYSQL服务器SQL Mode: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

  MYSQL的GROUP BY处理: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

sql mode 问题及解决 错误代码:1055 this is incompatible with sql_mode=only_full_group_by的更多相关文章

  1. sql查询出现1055 this is incompatible with sql_mode=only_full_group_by

    今天在测试服务器上突然出现了这么一个MySQL的问题,同样的代码正式服没有问题,那肯定就是出在了配置上,查了一下原因才明白原来是数据库版本为5.7以上的版本, 默认是开启了 only_full_gro ...

  2. Error Code: 1055 incompatible with sql_mode=only_full_group_by

    OperationalError at / (1055, "Expression #1 of ORDER BY clause is not in GROUP BY clause and co ...

  3. mysql 执行报错:Error querying database. Cause: java.sql.SQLSyntaxErrorException:which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    1.这个错误发生在mysql 5.7 版本及以上版本会出现的问题: mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY",这个配置严 ...

  4. Mysql 分组查询出现'this is incompatible with sql_mode=only_full_group_by'的解决办法

    由于Mysql自动开启了 only_full_group_by,所以若查询的字段不在group by里面,则分组报错. 解决办法其一:mysql配置,关闭only_full_group_by,这种办法 ...

  5. 执行sql语句后报1055-- this is incompatible with sql_mode=only_full_group_by

    这个问题是mysql5.7中存在的问题,查看原因,在任意库执行select @@sql_mode,查到的结果为ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZER ...

  6. #1055 ... sql_mode=only_full_group_by

    sql_mode=only_full_group_by 版权声明:本文为参考多篇博主文章,略作测试修改. 参考文章: 猿医生 的<5分钟学会MySQL-this is incompatible ...

  7. mysql group by 过滤字段 只能在SELECT 后面出现,不能写其他字段 报错解决 关键字 sql_mode=only_full_group_by

    1:报错  关键字 sql_mode=only_full_group_bymysql> select uuid,ip,count(*) from dbname_report.t_client_i ...

  8. 解决sql_mode=only_full_group_by的问题

    1.mysql查询报错: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_ ...

  9. Spring3+MyBatis3整合log4j无法输出SQL语句问题的解决

    今天遇到了跟下面文章一模一样的问题,下面文章的解决方案很好,在这里记录保存一下. Spring3+MyBatis3整合无法输出SQL语句问题的解决

随机推荐

  1. 使用隔离级别read committed隐式解决并发冲突

    1.使用rc的弊端:出现不可重复读 Oracle不可重复读 Oracle丢失修改 Oracle幻读 任何数据库的update  insert  delete都加排它锁 sql server的selec ...

  2. IdentityServer4同时使用多个GrantType进行授权和IdentityModel.Client部分源码解析

    首先,介绍一下问题. 由于项目中用户分了三个角色:管理员.代理.会员.其中,代理又分为一级代理.二级代理等,会员也可以相互之间进行推荐. 将用户表分为了两个,管理员和代理都属于后台,在同一张表,会员单 ...

  3. MSSql-SP_who分析数据库性能

    https://blog.csdn.net/xiaoxu0123/article/details/5757640 https://www.cnblogs.com/kelelipeng/p/104959 ...

  4. elementUI动态数据表格(带分页)

    index.vue <template> <div> <el-table ref="multipleTable" :data="tableD ...

  5. datatables初始化用法

    var recordTable = $('#record_table').DataTable({ "fnInitComplete": function () { //表格初始化完成 ...

  6. 8.Redis的复制(Master/Slave)

    Redis的复制(Master/Slave) a)是什么 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave ...

  7. MacOS文本编辑无法打不开GB18030

      不要直接双击打开   而是 打开sublime text或者其他文本编辑后,从软件里面的open选型打开 

  8. Linux中找回误删除的文件

    Linux中找回误删除的文件 作为一个多用户.多任务的Linux操作系统,会出现在没有备份的情况下将一些用户文件误删的情况,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只是在文件节点中作删 ...

  9. HBuilderX 5+APP MUI 入门

    这一套东西是用来开发app的,可以用html.js什么的写app然后给你打包就能安装到手机上,也可以轻易跨端(需要使用vue,然而我还没有熟练). HBuilder:一个敲代码的软件,敲前端代码超级方 ...

  10. webpack4.0打包优化策略整理小结

    本文转载于:https://www.jb51.net/article/137449.htm 介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性介绍-参考资 ...