一、原理层面 这个错误发生在mysql 5.7 版本及以上版本会出现的问题: mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY...,就是group by后面跟着的字段。...由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误...三、查看sql_mode的语句如下 select @@GLOBAL.sql_mode; 四、解决方案 1.永久修改,需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY...2.临时性修改sql_mode,但是重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。
报错场景 ---- 在sql语句中使用 group by 报错 SELECT FROM `user` GROUP BY `gender`; SQLSTATE[42000]: Syntax error...incompatible with sql_mode=only_full_group_by" 2....问题分析 ---- 一、原理层面 这个错误发生在mysql 5.7 版本及以上版本,5.7版本默认的sql_mode配置中包含 ONLY_FULL_GROUP_BY,这个配置严格执行了”SQL92标准”...由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list 和 group by 字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的...查看sql模式 ---- 查看 sql_mode 的语句 show global variables like 'sql_mode'; 通过命令行可以看到 sql_mode 的值有一堆,将最前面的 ONLY_FULL_GROUP_BY
系统环境 Ubuntu16.04+MySQL5.7.27; 问题 将数据从旧的数据库(MySQL5.1)迁移到新的数据库(MySQL5.7)中时,查询语句不变的情况下,报如下错; Cause: java.sql.SQLException...: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mwyq_db.news.news_time...' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode...=only_full_group_by 解决方法 查看sql-mode 修改后应该如下图所示,未修改前有ONLY_FULL_GROUP_BY选项; SELECT @@sql_mode; SELECT...,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 注意 MySQL8.0中,不支持NO_AUTO_CREATE_USER,所以在修改配置时,需要将这一项去掉;
今天遇到个报错 发现原来是MYSQL 8不支持在sql_mode包含only_full_group_by时(默认包含) HAVING的条件里有 非聚合字段 以外的字段 文档: ONLY_FULL_GROUP_BY...The HAVING clause can refer to aliases regardless of whether ONLY_FULL_GROUP_BY is enabled....For additional discussion and examples, see Section 12.20.3, “MySQL Handling of GROUP BY”....解决办法: 打开mysql的配置文件,修改或添加sql_mode [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 只要确保没有ONLY_FULL_GROUP_BY即可
大家好,又见面了,我是你们的朋友全栈君。...用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list...dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误 解决方法...(修改全局):执行set global sql_mode = ”; 把sql_mode 改成非only_full_group_by模式。...把sql_mode 改成非only_full_group_by模式。
incompatible with sql_mode=only_full_group_by 原因: MySQL 5.7.5及以上功能依赖检测功能。...默认情况下启用ONLY_FULL_GROUP_BY SQL模式,MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们...(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”)。...解决思路:将默认的“ONLY_FULL_GROUP_BY”配置去掉即可; 可通过 select @@global.sql_mode; 进行查询(如下) ?.../etc/my.cnf 将下面红字加入到[mysqld]中sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
mysql5.7.5版本默认设置了sql_mode=only_full_group_by,造成了之前使用的sql语句有些会出现sql_mode=only_full_group_by错误,接下来为解决此类问题的方法...1. sql解决(但是不是永久的) 查看sql_mode(select @@sql_mode) 去掉ONLY_FULL_GROUP_BY,重新设置值。...,NO_ENGINE_SUBSTITUTION'; ) 对于已存在的数据库,则需要在对应的数据下执行(set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...修改my.cnf文件(永久) 找到mysql的my.cnf文件,linux中找到/etc/my.cnf 找到sql_mode修改为( 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_mode
用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT...list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not...functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by...错误 解决方法 :执行SET GLOBAL sql_mode = ''; 把sql_mode 改成非only_full_group_by模式。...验证是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@sql_mode SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '{field}' which...is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by...0.053 sec 确认运行模式 mysql> select @@global.sql_mode; ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 重新设置运行模式 vi /etc/my.cnf [mysqld] # 去掉ONLY_FULL_GROUP_BY...即可 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException...with sql_mode=only_full_group_by错误 解决方法 :执行SET GLOBAL sql_mode = ”; 把sql_mode 改成非only_full_group_by模式...在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 sql_mode常用值如下: ONLY_FULL_GROUP_BY: 对于GROUP...BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。...如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysql的sql_mode设置如下: 在my.cnf添加如下配置 [mysqld] sql_mode=’ONLY_FULL_GROUP_BY
by字段不同的SQL在Oracle中跑一定是报错,提示如下,即要求在select中的非聚合列必须出现在group by子句中,为什么在MySQL中就可以执行?...这里要提到的一个参数就是sql_mode,他存储的是MySQL应该支持的SQL语法,对数据的校验等,一些常见的值,如下所示, (1) ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,...在MySQL 5.7以上,sql_mode参数值是默认包含这个only_full_group_by校验规则的,但是在5.7以下,不包含此规则,如上的SQL,就是跑在5.5, show variables...this is incompatible with sql_mode=only_full_group_by 我们删除sql_mode的only_full_group_by, set session...子句中未包含非聚合列的SQL,就需要写SQL的同学能保证select和group by的一致性,否则执行的SQL很可能得到的就是错误的结果集,从MySQL 5.7开始就默认支持校验规则only_full_group_by
线上服务器数据库查询使用了 GROUP BY 居然报出了 1055 – Expression #1 of SELECT list is not in GROUP BY clause and contains...sql_mode = only_full_group_by 属性,导致报错。...知道原因就好办, 查询怎么解决 下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 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
当我们迁移到 MySQL 5.7+ 的版本时,常会碰到 ERROR 1055 only_full_group_by 错误,这是 5.7 之后 SQL_MODE 默认打开了严格模式导致的错误。...讲 ONLY_FULL_GROUP_BY 错误前,我们先来说一下 SQL_MODE。理解 MySQL 工作原理能更好的帮你理解错误发生的本质原因。...ONLY_FULL_GROUP_BY 是 SQL_MODE 中TRADITIONAL 的选项参数,从 5.7 开始默认开启为严格模式。...、NO_AUTO_CREATE_USER 我们直接在 MySQL 配置文件中更改,或者临时全部关闭: SET GLOBAL sql_mode=''; 或者单关闭 ONLY_FULL_GROUP_BY MariaDB...[ONLY_FULL_GROUP_BY 使用聚合函数] MySQL 还提供了 ANY_VALUE() 函数,来解决这类问题: [ONLY_FULL_GROUP_BY 使用 any value] 总结和推荐
sql_mode:简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等 select @@sql_mode:使用该命令我们可以查看我们当前数据库的sql_mode mysql> select...的各个值的含义: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY...从句中 因为有only_full_group_by,所以我们要在MySQL中正确的使用group by语句的话,只能是select column1 from tb1 group by column1(即只能展示...set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 可以使用该语句来将空格替换掉only_full_group_by,...这样我们就可以使用 mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); Query OK, 0 rows
; this is incompatible with sql_mode=only_full_group_by 字面意思理解是sql_model=only_full_group_by限制了,导致在以往MYSQL...:使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的...,所以去掉就好 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY值得话,在进行查询时需要将select的字段都包含在...但是查看自己的配置my.cnf发现在sql_mode中并没有ONLY_FULL_GROUP_BY这个值 然后去查看Laravel的配置文件,config/database.php,查找mysql的配置,...关闭正在运行的mysql 2. 修改/etc/my.cnf,将sql_mode=中的only_full_group_by给删掉 3.
MySql的镜像,默认情况下,MySql5.7中的sql_mode含有only_full_group_by,group by语句有时候会报错。...通过手动修改sql_mode,那么如果删除容器或者新建容器,就会导致我们手动设置的sql_mode失效,所以自己制作一个基于mysql镜像的镜像,解决sql_mode含有only_full_group_by...的问题。...再次查看sql_mode,就会看到sql_mode没有only_full_group_by了。 ...不过可以在创建容器的时候用MYSQL_ROOT_PASSWORD来设置新的root密码。
错误原因: MySQL 5.7.5及以上版本实现了对功能依赖的检测。...如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。...,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION only_full_group_by说明: only_full_group_by :使用这个就是使用和oracle...一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好 官网摘抄:...的 ONLY_FULL_GROUP_BY 但很多网友说直接修改mysql配置文件,在my.ini加上sql_mode=即可 [mysqld] sql_mode= 黄啊码也亲自尝试过,确实可以!
ONLY_FULL_GROUP_BY的设定,将不允许查询字段包括非聚集列 查询mysql服务器版本:以下命令在终端或者navicat中输入执行均可。...默认: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY...关闭正在运行的mysql 2. 修改/etc/my.cnf,将sql_mode=中的only_full_group_by给删掉 3....推荐使用更改my.cnf方法更改sql_mode,以防止后续重启mysql服务或者服务器配置失效。...sql_mode常用值: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY
后面我了解了一下情况,大概的情况就是他们写了一个sql,使用了group by,然后group by里面的字段只有一个,但是select语句中查询了多个字段,导致MySQL报了类似下面的错误: ERROR...with sql_mode=only_full_group_by 大概就是说这个select语句中的字段了group by中的字段不一致,这在MySQL中是不被允许的。...group by三个字段,那么这个结果是可靠的,没有报错误,而且是按照group by最近的一个字段age来进行的分组,再来看单独使用id的情况以及使用id和score的情况: mysql--dba_admin...经过我们上面这么多实验,可以得到下面的结论: 1、当我们的sql_mode使用了only_full_group_by的时候,如果要想实现select的字段和group by的字段数量不相同而查询语句不出错...2、当我们去掉sql_mode的only_full_group_by的时候,之所以前后字段数量不一致还能查询成功,实际上是mysql为我们进行了补齐。
领取专属 10元无门槛券
手把手带您无忧上云