MySQL5.7版本sql_mode=only_full_group_by问题解决办法

MySQL5.7版本sql_mode=only_full_group_by问题解决办法在服务器数据库查询使用了GROUPBY居然报出了1055-Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn’csc_risk.a.DefaultDate’whichisnotfunctionallydependentoncolumnsin…

大家好,又见面了,我是你们的朋友全栈君。

线上服务器数据库查询使用了 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()

MySQL5.7版本sql_mode=only_full_group_by问题解决办法 

 查询线上数据库版本发现确实是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

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141408.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月9日 下午12:20
下一篇 2022年5月9日 下午12:20


相关推荐

  • 【C语言】递归详解汉诺塔问题

    【C语言】递归详解汉诺塔问题汉诺塔 是一个源于印度古老传说的益智玩具 大梵天创造世界的时候做了三根金刚石柱子 在一根柱子上从下往上按照大小顺序摞着 64 片黄金圆盘 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上 并且规定 在小圆盘上不能放大圆盘 在三根柱子之间一次只能移动一个圆盘 当把 64 片圆盘从第一根石柱移动到第三根石柱时 这个世界就会毁灭 而婆罗门移动圆盘需要用多长时间呢 通过平常的方法是很难计算的 今天我们就利用递归的思想来计算一下汉诺塔的移动次数和汉诺塔的移动步骤

    2026年3月16日
    2
  • AD域介绍

    AD域介绍域的背景介绍为什么要使用域?假设你是公司的系统管理员,你们公司有一千台电脑。如果你要为每台电脑设置登录帐户,设置权限(比如是否允许登录帐户安装软件),那你要分别坐在这一千台电脑前工作。如果你要做一些改变,你也要分别在这一千台电脑上修改。相信没有哪个管理员想要用这种不吃不喝不睡觉的方式来工作,所以就应运而生了域的概念。域(Domain):概念域模型就是针对大型网络的管理需求而设计的,域就是共享用户账号,计算机账号和安全策略的计算机集合。域的管理优点因为所有的用户信息都被集中存储,所以,域提供了集

    2022年5月17日
    108
  • 在vue中使用swiper轮播图(亲测有效)

    在vue中使用swiper轮播图(亲测有效)在 vue 中使用 swiper 轮播图 亲测有效 1 新建 vue 项目 2 装 swiper 的包 3 使用 swiper 网上搜了一大堆在 vue 中如何使用 swiper 结果搜出来一堆垃圾 也不知道从哪里复制的 吐槽完毕 假设你是个新手 我从新建项目开始跟你讲 以下是步骤 1 新建 vue 项目 vuecreate 项目名然后选最下面那一个 键盘上下键操作 然后回车选择 Bable Router Vuex Css Processords 四个 其他的不要选中 空格键是选中和取消选中 剩下的步骤按这张图来进行选择 然

    2026年3月20日
    2
  • php设计模式总结-工厂模式

    php设计模式总结-工厂模式

    2022年3月12日
    34
  • 实现带查询功能的Combox控件

    实现带查询功能的Combox控件

    2021年11月30日
    53
  • Modifying Table Partitions

    Modifying Table PartitionsModifyingTablePartitionsOracleTipsbyBurleson Youcanmodifyatableortablepartitioninanyofthewa

    2022年6月26日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号