问题
在部署到生产环境的服务器上时,执行原来的SQL语句出现了"this is incompatible with sql_mode=only_full_group_by"错误。
原因
在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行。问题在于SQL语句不够规范,在group by之后某些结果是不确定的,才会发现此类错误。
ONLY_FULL_GROUP_BY的语义就是select target list中的所有列的值都是明确语义
,简单的说来,在此模式下,target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值。
解决办法
在SELECT
后面的结果加上ANY_VALUE函数,忽略每个名称组中的地址值的不确定性并接受查询。如:
# 修改前
SELECT name,mobile FROM person
WHERE code='020'
group by time;
# 修改后
SELECT ANY_VALUE(name),ANY_VALUE(mobile) FROM person
WHERE code='020'
group by time;
当然,最好是解决掉返回值不确定问题,而不是忽略掉。。。