当前位置: 代码网 > it编程>数据库>Mysql > MySQL5.7版本sql_mode=only_full_group_by问题及解决过程

MySQL5.7版本sql_mode=only_full_group_by问题及解决过程

2026年07月25日 Mysql 我要评论
线上服务器数据库查询使用了 group by 居然报出了1055 - expression #1 of select list is not in group by clause and contai

线上服务器数据库查询使用了 group by 居然报出了

1055 - expression #1 of select list is not in group by clause and contains nonaggregated column 'csc_risk.a.defaultdate' which is not functionally dependent on columns in group by clause; this is incompatible with sql_mode=only_full_group_by, time: 0.035000s 

于是把部分数据迁移到本地进行测试,  发现sql语句可以执行

查看本地数据库版本

select version()

 查询线上数据库版本发现确实是5.7版本

5.7.24

原因分析

mysql5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。

知道原因就好办, 查询怎么解决 

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

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

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

1、查看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

2、去掉only_full_group_by 重新设置值

set @@global.sql_mode ='strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution';

3、上面是改变了全局sql_mode 对于新建的数据库有效

对于已存在的数据库,则需要在对应的数据下执行:

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';

以上方式临时解决没有问题的,数据库重启就需要重新设置

修改mysql配置文件

linux下my.cnf或windows下my.ini

注意在[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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com