首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方法

一、原理层面        这个错误发生在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还会出现。

9.1K30

MySQL5.7 中使用 group by 报错 this is incompatible with sql_mode=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

2K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    已解决:mysql报错:1055 - this is incompatible with 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

    5.1K30

    mysql5.7.5版本的sql_mode=only_full_group_by问题

    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

    41740

    MySQL 报错:5.7版本sql_mode=only_full_group_by问题

    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

    1.4K90

    MySQL 报错:5.7版本sql_mode=only_full_group_by问题

    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

    1.7K30

    小白学习MySQL - 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

    43230

    MySQL only_full_group_by 1055 报错的三种解决方案,临时关闭有影响吗?

    当我们迁移到 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] 总结和推荐

    6.1K60

    mysql sql-mode 解析和设置

    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

    1.6K20

    ERROR 1055 (42000): Expression #1 of SELECT list is not in

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

    1.4K40

    【黄啊码】MySQL:Syntax error or access violation: 1055 Expression #1 of SELECT list is not ...

    错误原因: 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= 黄啊码也亲自尝试过,确实可以!

    53630

    MySQL报错1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated colu

    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

    49450

    sql_mode之only_full_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为我们进行了补齐。

    3.8K31
    领券