首页 > 数据库技术 > 详细

Mysql数据库sql_mode参数only_full_group_by引发的报错

时间:2021-08-03 18:39:24      阅读:21      评论:0      收藏:0      [点我收藏+]

?

报错信息如下:

从报错log很容易能看到sql语句以及报错sql_mode=only_full_group_by字样。

技术分享图片

业务执行的sql语句:

SELECT desk_message.area_description,desk_message.areacode,desk_message.width,desk_message.height,desk_area.area_descriptionEn,desk_area.area_descriptionEn area_description_en FROM desk_message LEFT JOIN desk_area ON desk_message.areacode = desk_area.areacode WHERE desk_message.resturantcode = ? group by desk_message.areacode

?

造成报错的原因:

1.数据库开启了only_full_group_by参数。

2.研发的sql查询语句使用了分组,但是你又不能不支持,所以还是1造成的。

技术分享图片

?

解决办法:

1.修改/etc/my.cnf文件,新增如下行,目前mysql的/etc/my.cnf文件中是没有sql_mode行,默认全开

sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2.在mysql数据库中临时set修改。

?

自己测试:

Sql_mode中包含only_full_group_by参数时,运行group by结果如下:

技术分享图片

Sql_mode中取消only_full_group_by参数的运行结果:

技术分享图片

总结如下:

在mysql5.7中

当sql_mode中含有only_full_group_by参数时,select A from databse group by A.否则会报错。

当sql_mode中未含有有only_full_group_by参数时,select A(B/C/D) from databse group by A.不会报错。

?

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。简而言之,就是SELECT后面接的列必须被GROUP BY后面接的列所包含。

?

?

?

?

Mysql数据库sql_mode参数only_full_group_by引发的报错

原文:https://blog.51cto.com/215687833/3257906

(0)
(0)
   
举报
评论 一句话评论(0
分享档案
最新文章
教程昨日排行
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!