?
报错信息如下:
从报错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后面接的列所包含。
?
?
?
?