背景 |
Linux服务器上的MySQL版本为5.7.19,将开发时使用的数据库部署到Linux后,网站访问出现错误。
ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP
BY clause and contains nonaggregated column 'role_id' which
is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
“role_id”既不是Group By 后的列,也不是聚合函数列,这与only_full_group_by的模式不兼容。意思就是数据库开启了only_full_group_by模式,但是SQL语句并不符合此模式的要求。
解决方案 |
出现这个问题的原因是:MySQL在版本5.7.5时默认开启了“ONLY_FULL_GROUP_BY”模式,导致一些在以往数据库版本中可以正常执行的SQL语句在5.7.5版本及以后执行会出错。
正常思路,解决问题的方式有两种:一是修改SQL语句,使其符合要求;二是关闭数据库的“only_full_group_by”模式,无需修改SQL语句。
在错误列(不是聚合函数列,没有包含在Group By字句后),使用ANY_VALUE()函数。
关闭“only_full_group_by”模式。