报错
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结合可不用重启服务器,且即使重启配置也依然有效。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/3931.html