当前位置: 代码迷 >> 综合 >> 关于Mysql 5.7 sql_mode=only_full_group_by的问题
  详细解决方案

关于Mysql 5.7 sql_mode=only_full_group_by的问题

热度:75   发布时间:2023-12-26 20:00:54.0
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
#解决方案一(注:重启无效)
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';
#解决方案二
vim /etc/my.cnf
#添加如下配置
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
#保存
:wq
#重启MySQL服务
service mysqld restart
#解决方案三
MySQL有any_value(field)函数,他主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝
官方有介绍,地址:https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value
可以把select语句中查询的属性(除聚合函数所需的参数外),全部放入any_value(field)函数中;
例如:
select name,any_value(sex) from test_table group by name;
这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。
  相关解决方案