MySQL中版本5.7及以上出现的ONLY_FULL_GROUP_BY问题

在MySQL5.7及以上的版本中,如果使用那个group by会产生一个异常:

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.t_long.user_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

是因为5.7及以上的版本中增加了一个group by校验的功能,那么如何关闭这个功能,使数据库能正常使用group by方法呢?
首先我们可以运行如下命令查看sql_mode

SELECT @@sql_mode;

那么控制台的输出为:

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_BY,去掉。
在MySQL的文件夹根目录下,有一个文件my.ini,(windows下为my.ini ,在linux下为my.cnf),打开,在[mysqld]下方找sql_mode这一个值,将其改为STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

如果没有,则在[mysqld]下方,手动添加sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注意,一定是在[mysqld]下方操作,否则无效。

然后重启MySQL:
在命令行模式下,关闭MySQL:输入net stop mysql
再打开MySQL:输入net start mysql
如此,别能正常使用group by 命令。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容