天天看点

MYSQL5.7版本sql_mode=only_full_group_by问题

具体出错提示:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决办法:

1.1. 查看sql_mode. 

SELECT @@sql_mode

或:

<code>select @@global.sql_mode;</code>

1.2.  查询出来的值为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

临时方法:

去掉 ONLY_FULL_GROUP

SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

去掉ONLY_FULL_GROUP_BY,重新设置值。

上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行。

再查看sql_mode.

确实是没有 ONLY_FULL_GROUP了。

永久方法:

修改my.cnf

oneinstack安装的系统,my.cnf在 etc/my.cnf。

vi 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

重启mysql

service mysqld restart.

再查看:sql_mode.

OK!!!

解释:

修改my.cnf(windows下是my.ini)配置文件,删掉only_full_group_by这一项

下载安装的是最新版的mysql5.7.x版本,默认是开启了 <code>only_full_group_by</code> 模式的,但开启这个模式后,原先的 <code>group by</code> 语句就报错,然后又把它移除了。

一旦开启 <code>only_full_group_by</code> ,感觉,<code>group by</code> 将变成和 <code>distinct</code> 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,<code>group by</code> 的功能将变得十分狭窄了

<code>only_full_group_by</code> 模式开启比较好。

因为在 <code>mysql</code> 中有一个函数: <code>any_value(field)</code> 允许,非分组字段的出现(和关闭 <code>only_full_group_by</code> 模式有相同效果)。

----------  招募未来大神 -----------------------

如果您有利他之心,乐于帮助他人,乐于分享

如果您遇到php问题,百度且问了其他群之后仍没得到解答

欢迎加入,PHP技术问答群,QQ群:292626152

教学相长!帮助他人,自己也会得到提升!

为了珍惜每个人的宝贵时间,请大家不要闲聊!

愿我们互相帮助,共同进步!

加入时留言暗号,php,ajax,thinkphp,yii...

     本文转自phpervip 51CTO博客,原文链接:,http://blog.51cto.com/phpervip/1960871如需转载请自行联系原作者