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

?

报错信息如下:

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

Mysql数据库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造成的。

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

?

解决办法:

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结果如下:

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

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

Mysql数据库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后面接的列所包含。

?

?

?

?

上一篇:oracle 11g 分区表创建(自动按年、月、日分区)


下一篇:mysql json 嵌套数组查询