MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案

MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下:

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘××ב which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

描述:select的列都要在group中,或许本身是聚合列(SUM,AVG,MAX,MIN)才行

解决方案一:

这时我们可以通过navicat或workbench输入select @@global.sql_mode来查看当前数据库的sql_mode属性值

复制查询结果,去掉ONLY_FULL_GROUP_BY,重新赋值,执行成功后,就可以将ONLY_FULL_GROUP_BY模式默认设置为关闭状态,解决之前的sql报错问题

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‘

但是这种方式设置的只是当前会话中的sql_model,服务器重启后,设置可能会失效。设置永久生效模式可参考博客:https://www.cnblogs.com/zenghui940/p/4361941.html

解决方案二:

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拒绝。

本人小白,如果表述的难以理解可查看博客:http://www.ywnds.com/?p=8184

原文地址:https://blog.csdn.net/Peacock__/article/details/78923479

原文地址:https://www.cnblogs.com/jpfss/p/11130877.html

时间: 2024-08-29 19:07:32

MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案的相关文章

mysql5.7和mysql5.6默认的sql_mode说明

一.场景: 最近在部署新的项目,开发要求把原先旧项目的MySQL数据导入到新项目MySQL5.7的数据库上.(旧项目上运行的是mysql5.6)不就是导入数据嘛,也没多想,那就导入呗.导入时,开始报错了,报错如下:MySQL 5.7 ERROR 1067 (42000): Invalid default value for 'CREATE_TIME'MySQL 5.7 ERROR 1067 (42000): Invalid default value for 'day'简单google了下,发现

开发网站时解决360浏览器的兼容性问题,兼容模式打不开,让网页默认为极速模式打开

360浏览器打开网页默认是兼容模式,导致有些网页打不开, 可以在网页头部加上代码,默认改为为极速模式打开,就正常了: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10" />

用meta标签让网页用360打开时默认为极速模式

最近做项目,用360浏览器访问自己的本地网页,发现都是默认在兼容模式下打开,做的淡入淡出轮播效果在兼容模式下看时,感觉切换很生硬.百度,发现360官网帮助里有说明用meta标签控制浏览器内核,网址为http://se.360.cn/v6/help/meta.html. 实现方式很简单,就是在head标签中加上一个meta标签: <html> <head> <meta name="renderer" content="webkit|ie-comp|

Windows 7突然断电默认进入修复模式解决方法

[关键词]:修复模式 [适用版本]:Windows [问题描述]: Windows虚拟机不正常关机下,再启动系统默认进入恢复模式而无法恢复. [问题分析]: 虚拟化平台上运行的Windows虚拟机,在突然断电(主机奔溃等)后,虚拟化平台上虚拟机在HA作用下,会把虚拟机漂移到另外台正常主机上继续开机运行,但由于Windows默认针对于硬件上运行,所以为了保护系统而默认进入恢复模式. [解决方法]: 进入windows系统,使用管理员打开cmd,运行以下两条命令: 1.bcdedit /set {d

文件打开的模式和文件对象方法

文件打开模式 打开模式       执行操作 'r'             以只读方式打开文件(默认) 'w'            以写入的方式打开文件,会覆盖已存在的文件 'x'             如果文件已经存在,使用此模式打开将引发异常 'a'             以写入模式打开,如果文件存在,则在末尾追加写入 'b'             以二进制模式打开文件 't'              以文本模式打开(默认) '+'             可读写模式(可添加到其

Eclipse Myeclipse 设定文件的默认打开方式

菜单:Window -> Preferences -> General -> Editors -> File Associations File types: *.xml Associated editors:XML Editor*** -> Default 在Associated editors选择框里点击“XML Editor*** ”,点击“Default”按钮. 你将看到“XML Editor*** ”排在最上面,其变为“XML Editor(Default)***

Fedora如何设置启动默认进入文本模式

Fedora安装成功后一般启动默认进入的是图形模式,但是图形模式会占用大量的资源,对于怎样修改为启动默认进入文本模式,在网上搜索一般得到的答案是,修改/etc/inittab文件: [plain] vi /etc/inittab   Find out entry that read as follows:  id:5:initdefault:   Set the default runlevel to 3 (text mode)  id:3:initdefault:  Save and clos

MyEclipse设置jsp页默认打开方式

可以用来设置jsp页默认打开是代码编辑模式而不是半视图半代码的模式. 1.选择菜单Window→Preferences. 2.选择General→Editors→File Associations.在File types中选中jsp,再在Associated editors选择你需要的方式,如这里的MyEclipse JSP Editor.点击右边的Default. 以此类推,这里还可以设置其他不同种类页面的默认打开方式.

此项目的默认Web访问模式设置为文件共享, 但是无法从路径(此为转贴)

故障现象: 当你打开ASP.NET Web项目时,如果出现这样的错误提示:提示窗口标题: Web访问失败提示内容: 此项目的默认Web访问模式设置为文件共享, 但是无法从路径“...”打开“...”处的项目文件夹.返回的错误是: 无法打开Web项目“”.返回的错误是: 无法打开Web项目“...”.文件路径“...”怀URL“...”不符.这两者需要映射到相同的服务器位置.HTTP错误404: Not Found ...... 处理方法: 到“C:/Documents and Settings/