SQL Error (1055) sql_mode=only_full_group_by
报错
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'aaa.test.age' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql5.1,不报异常
mysql5.5,不报异常
mysql5.6,不报异常
mysql5.7,报异常
原因
原因是因为mysql中对 group by 用法的规定。严格意义上说,就是用了group by之后。select 的字段只能是group by的字段,或者需要加聚合函数的。在 oracle 中,一直有这项约定。所以直接就会报错。但是mysql 直到 5.7 版本之后才把这个要求明确限制起来。
这种问题两种思路:
第一修改sql,按照规定的规范重写项目中所有有问题的sql。很明显代价太大。风险很高;不过还未开发时可以严格规范写法。
第二种那就是把这种限制去掉,让功能继续像5.7之前的样子一样能跑。已经完成的项目用这种,因为第一种代价太大。
解决方法
1、改写SQL语句,毕竟上面的写法不是标准的SQL语句
2、登陆mysql服务器,执行以下命令,在global与session级都修改
3、结合第2种方法,在my.cnf文件中,指定sql_mode的值:
注:2与3结合可不用重启服务器,且即使重启配置也依然有效。
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~