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

与mysql中的sql_mode=only_full_group_by不兼容

是指在MySQL数据库中,当设置sql_mode为only_full_group_by时,会导致某些查询语句无法执行或者结果不符合预期。

sql_mode是MySQL中的一个系统变量,用于控制数据库的行为。当设置sql_mode为only_full_group_by时,MySQL会对GROUP BY语句进行严格的检查,要求SELECT语句中的列必须是GROUP BY子句中的列或者使用聚合函数进行计算。

这种严格的检查可以避免在GROUP BY查询中出现模糊的结果,但也会导致一些旧的查询语句无法正常执行。特别是在旧版本的MySQL中,许多查询语句可能没有按照严格的GROUP BY规则编写,因此在更新MySQL版本或者设置sql_mode为only_full_group_by时,可能会出现不兼容的情况。

解决与mysql中的sql_mode=only_full_group_by不兼容的方法有以下几种:

  1. 修改查询语句:将查询语句中的列修改为GROUP BY子句中的列或者使用聚合函数进行计算,以符合only_full_group_by的要求。
  2. 修改sql_mode:可以将sql_mode设置为其他的值,如STRICT_TRANS_TABLES,以避免only_full_group_by的限制。但需要注意,修改sql_mode可能会影响其他查询语句的执行结果,需要谨慎操作。
  3. 使用合适的腾讯云产品:腾讯云提供了多种数据库产品,如TencentDB for MySQL、TencentDB for MariaDB等,这些产品都可以在控制台中进行配置,包括sql_mode的设置。可以根据具体需求选择合适的产品,并根据文档中的指引进行配置。

总结:与mysql中的sql_mode=only_full_group_by不兼容是指在MySQL数据库中,当设置sql_mode为only_full_group_by时,可能会导致某些查询语句无法执行或者结果不符合预期。可以通过修改查询语句、修改sql_mode或者使用腾讯云的数据库产品来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

sql_mode兼容性,MySQL 8.0 升级踩过的坑

因为,报错的这句sql_mode设置,与MySQL 5.7 版本的默认sql_mode设置一模一样。...在MySQL 5.7中sql_mode的默认配置就是sql_mode='ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE...2.3 检查并解决不兼容的sql_mode 实际上,在MySQL 8.0中废弃的sql_mode并不仅仅只有NO_AUTO_CREATE_USER,还有一些模式同样也是8.0不兼容的。...但是,以上种种方案只能保证MySQL升级前后的全局参数配置是OK的;客户端连接设置的会话级参数我们无法控制。这里就需要开发人员配合一起检查业务侧代码里有没有与MySQL 8.0不兼容的参数设置。...总结 那么,哪些参数/设置是MySQL 8.0与之前版本不兼容的呢? 我将在下一篇文章同大家分享这个问题。我会持续做一些相关记录和分享。

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

    一、原理层面        这个错误发生在mysql 5.7 版本及以上版本会出现的问题:        mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY...很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。...由于开启了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

    技术分享 | 深入理解 MySQL 中的 SQL_MODE

    SQL_MODE 在迁移前的调整 在将 MySQL 数据库迁移到其他数据库之前,可以考虑以下步骤来调整 SQL_MODE,以减少迁移时可能出现的兼容性问题: 禁用严格模式:在迁移前,禁用 MySQL 中的严格模式...通过禁用严格模式,可以提前发现并处理不兼容的数据。...空字符串与 NULL 的处理:在 MySQL 中,空字符串和 NULL 可能在一些情况下被视为相等,而在其他数据库中并非如此。迁移前,应该明确这些字段的逻辑,并在必要时进行转换。...在迁移前,使用 SQL_MODE 的 ANSI_QUOTES 选项可以确保标识符的引用方式符合 SQL 标准,并减少在目标数据库中的兼容性问题。 3....小结 在从 MySQL 迁移到其他数据库时,合理调整 SQL_MODE 可以显著减少迁移过程中的兼容性问题。

    17810

    MySQL5.7 中使用 group by 报错 this is incompatible with sql_mode=only_full_group_by

    问题分析 ---- 一、原理层面 这个错误发生在mysql 5.7 版本及以上版本,5.7版本默认的sql_mode配置中包含 ONLY_FULL_GROUP_BY,这个配置严格执行了”SQL92标准”...很多人从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序 二、sql层面: sql执行时,出现该原因: 简单来说就是:输出的结果是叫 target...由于开启了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...解决方案(去除 ONLY_FULL_GROUP_BY) ---- 方案一: 临时性解决 (执行SQL语句) 此方式重启MySQl服务后失效 set @@GLOBAL.sql_mode="STRICT_TRANS_TABLES

    2K51

    MySQL中的sql_mode参数

    MySQL中的sql_mode参数 sql_mode参数详解 首先我们看看mysql中默认的sql_mode的值是什么: root@localhost :(none)09:25:15>select...一共有7个值,分别是 only_full_group_by: 对于group by聚合操作,如果在select中的列,没有在group by中出现,那么将认为这个sql是不合法的,因为列不在group...在STRICT_TRANS_TABLES模式下,插入数据时,mysql会严格的进行数据的校验,当发现插入列值未满足要求,直接报告error错误,保证了错误数据无法插入到数据库中。...不设置此值时,用默认的存储引擎替代,并抛出一个异常。...如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。

    1.5K10

    【MySQL】MySQL配置中sql_mode的作用

    MySQL配置中sql_mode的作用 不知道你有没有踫到过这种问题,在 MySQL8 默认的情况下,我们之前习惯的为 DateTime 类型指定的 0000-00-00 这种格式是无法插入或者修改数据的...sql_mode 根据官网的解释,MySQL 服务器是可以在不同的 SQL 模式中运行的,这个模式会影响 MySQL 支持的 SQL 语法及其执行的数据验证检查。...我们可以通过上面的方式直接修改 my.cnf 文件,当然也可以通过 SET sql_mode=xxx 的形式在命令行中动态修改,如果是修改的 my.cnf 文件,则需要重启 MySQL 服务,再次执行插入语句...0 ONLY_FULL_GROUP_BY 表示拒绝在 SELECT、HAVING 或 GROUP BY 中引用聚合列的查询。...在转移或升级到 MySQL8 之后,其实最常见的问题就是上面说过的日期问题,0格式日期这种形式其实是已经过时的方式了,也是不推荐的方式,所以在 MySQL8 中会默认在严格模式下禁用这种形式的日期存储,

    15210

    mysql5.7 group by语法 1055

    先来看如下语句,查询默认存在的引擎表 ?  之前使用的MySQL版本为5.7以下,根据support进行分组执行语句如下 ? 添加跟分组support无关的字段engine ?...information_schema.ENGINES.ENGINE' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode...=only_full_group_by 意思是 SELECT list不在GROUP BY子句中,并且包含非聚合列'information_schema. engine。...在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容 也就是select展示的列必须跟group by相关 这就跟oracle的group by语法一致了...,NO_ENGINE_SUBSTITUTION 修改方式,window编辑my.ini,Linux编辑my.cnf,将[mysqld]中的sql_mode的值删除ONLY_FULL_GROUP_BY,重启解决

    1.3K20

    小白学习MySQL - only_full_group_by的校验规则

    在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...,group by中未包含非聚合列是c1,而且明确提示,他和sql_mode=only_full_group_by不兼容, select c1, c2 from test group by c2; SQL...SQL很可能得到的就是错误的结果集,从MySQL 5.7开始就默认支持校验规则only_full_group_by能看出,MySQL提高了校验强度,毕竟更严格的校验规则,才可能避免这些非常容易出现的错误

    43230

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

    如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。...(在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅MySQL 5.6参考手册。)...session和global 的sql_mode的值都为: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO...一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好 官网摘抄:...的 ONLY_FULL_GROUP_BY 但很多网友说直接修改mysql配置文件,在my.ini加上sql_mode=即可 [mysqld] sql_mode= 黄啊码也亲自尝试过,确实可以!

    53630

    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> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY...不设置此值时,用默认的存储引擎替代,并抛出一个异常 三、据说是MySQL5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 ...将当前数据库模式设置为STRICT_TRANS_TABLES模式: mysql> set @@sql_mode=STRICT_TRANS_TABLES;   没有最好与最坏的模式,只有最合适的模式。

    1.6K20

    mysql 版本bug

    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by 在mysql 工具 搜索或者插入数据时报下面错误: ERROR...=only_full_group_by 原因: 看一下group by的语法: select 选取分组中的列+聚合函数 from 表名称 group by 分组的列  从语法格式来看,是先有分组,再确定检索的列...我当前Mysql版本5.7.17, 再看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,...,NO_ENGINE_SUBSTITUTION 第一项默认开启ONLY_FULL_GROUP_BY, 解决方法: 1.只选择出现在group by后面的列,或者给列增加聚合函数;(不推荐) 2.命令行输入...但是如果你重启Mysql服务的话,发现ONLY_FULL_GROUP_BY还是会存在的 想要彻底解决这个问题 就得去改my.ini 配置(如果你们mysql 没有这个文件,就把my-default.ini

    1.4K20

    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 工作原理能更好的帮你理解错误发生的本质原因。...SQL_MODE 是 MySQL 中的一个环境变量,定义了 MySQL 支持的 SQL 语法和数据校验程度。 SQL_MODE 一共三种模式 ANSI 模式:宽松模式。...正如我前文所写,这个错误的关键原因是不规范的 SQL 语法,5.7 之后默认 SQL_MODE 变为严格模式。...ONLY_FULL_GROUP_BY 是 SQL_MODE 中TRADITIONAL 的选项参数,从 5.7 开始默认开启为严格模式。

    6.1K60

    MySQL的sql_mode设置导致报错1292

    在MySQL8.0的一个PXC集群中,默认的sql_mode设置如下:select @@sql_mode;+-----------------------------------------------...,默认情况下MySQL都设置了严厉模式,不同于Oracle默认的相对宽松的模式,8.0版本的这些严厉模式包括建表时不允许没有主键,插入日期型数据不能为0或其他非法格式等等,这些模式的设置会导致在数据迁移...、兼容性测试时报错,要么修改应用限制以适配数据库,要么修改数据库配置以适配已有的应用。...= 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';这样后续的会话连接就不错报错了,需要注意的是,在PXC...一劳永逸的方法就是修改数据库配置文件/etc/my.cnf,sql_mode设置如下,重启数据库生效:sql_mode='ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO

    89930

    Mysql服务器SQL模式 (官方精译)

    (在5.7.5之前,MySQL没有检测到函数依赖,并且ONLY_FULL_GROUP_BY默认情况下是不启用的。关于5.7.5之前的行为的描述,请参阅MySQL 5.6参考手册。...如果无法修改违规查询(例如,如果它是由第三方应用程序生成的),请sql_mode在服务器启动时将系统变量设置为不启用 ONLY_FULL_GROUP_BY。...但为了恢复MySQL 5.7与MySQL 5.6严格模式的兼容性,并为受影响的应用程序提供更多的时间修改,MySQL 5.7.8中进行了以下更改: ERROR_FOR_DIVISION_BY_ZERO...在以下情况下,您将遇到与SQL模式更改相关的复制不兼容问题: MySQL 5.6主站和5.7从站 基于语句的复制 如前所述,SQL语句在MySQL 5.6和5.7中产生不同的结果...要处理这种不兼容性,请使用以下解决方法之一: 使用基于行的复制 使用 IGNORE 在MySQL 5.6和5.7中使用SQL语句不会产生不同结果的SQL模式 存储的程序(

    3.4K30

    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...=only_full_group_by错误 解决方法 :执行SET GLOBAL sql_mode = ”; 把sql_mode 改成非only_full_group_by模式。...,可能会报错,删除my.ini中新添的文件,重新启动即可, MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入...不设置此值时,用默认的存储引擎替代,并抛出一个异常 PIPES_AS_CONCAT: 将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似...如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysql的sql_mode设置如下: 在my.cnf添加如下配置 [mysqld] sql_mode=’ONLY_FULL_GROUP_BY

    1.4K90
    领券