mysql:关闭sql_mode=ONLY_FULL_GROUP_BY模式

这篇具有很好参考价值的文章主要介绍了mysql:关闭sql_mode=ONLY_FULL_GROUP_BY模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JAVA后台报错信息:

Caused by: java.sql.SQLSyntaxErrorException: Expression #16 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql_data.s.k_persion' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with

原因: mysql默认开启only_full_group_by模式,当碰到不符合格式的group by 语句就会报错;(sql_mode=only_full_group_by 模式 要求 select 多少个字段对象,则group by 后面就需要带上多少个字段对象;)
例如sql语句如下:

-- 查询人员信息,按部门分组,显示姓名和部门
SELECT S.PSL_NAME,S.DEPARTMENT  FROM k_persion S GROUP BY DEPARTMENT

运行时就会报错:

 Caused by: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column  'mysql_data.k_persion .PSL_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by  

其大体的意思就是这个sql语句不符合 mysql_data 数据库的group by 格式要求(因为这个数据sql_mode=only_full_group_by),但我们把当sql改成如下格式后就可以运行了:

-- 查询人员信息,按部门分组,显示姓名和部门
SELECT S.PSL_NAME,S.DEPARTMENT  FROM k_persion S GROUP BY DEPARTMENT,PSL_NAME

这样的格式是不报错了,但是查询的目标效果却错了;因此我们需要把sql_mode 的 only_full_group_by模式关掉。

解决方式:
1、临时关闭(当mysql重启后失效):
使用sql语句修改的方式修改sql_mode 的Session级和GLOBAL级信息
查看sql_mode 的信息

-- 查看数据库版本和 Session级信息
SELECT VERSION(),@@sql_mode;
-- 查看数据库版本和 GLOBAL级信息
SELECT VERSION(),@@GLOBAL.sql_mode;

我们发现在对应的sql_mode列中都含有 ONLY_FULL_GROUP_BY 参数,因此我们需要把这个属性去掉,打开数据库查询界面,运行如下语句;

 -- 关闭 session级
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

-- 关闭 GLOBAL级
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

再查询sql_mode后发现ONLY_FULL_GROUP_BY 已经没有了,然后再运行我们的sql语句就不报错了。

2、永久关闭:
永久关闭ONLY_FULL_GROUP_BY,需要去修改mysql服务的配置文件my.ini 文件,本人是Win10服务,若是linux服务环境,应该是 XX/etc/my.cnf 的文件。(若想永久生效,修改配置文件是永恒不变的真理…)
找到mysql的my.ini 文件(在mysql服务安装的路径下找),打开文件在[mysqld] 中添加如下语句:

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

如下图:
only_full_group_by关闭,mysql,java,mysql,sql,java保存后重启mysql服务即可。

若不确定自己的sql_mode=‘xxxx’ 到底要有哪些参数,可以通过 SELECT @@sql_mode; 查询出自己数据库现有的参数,然后ONLY_FULL_GROUP_BY对象去掉即可。文章来源地址https://www.toymoban.com/news/detail-802429.html

到了这里,关于mysql:关闭sql_mode=ONLY_FULL_GROUP_BY模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL 报错 sql_mode=only_full_group_by 问题

    SQL 报错 sql_mode=only_full_group_by 问题 原因分析 一、原理层面 这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题: mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了\\\"SQL92标准\\\"。 很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql

    2024年02月15日
    浏览(54)
  • mysql 8.0 找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

    sql_mode=only_full_group_by问题产生原因:MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。 1、navcat中新建查询: select @@

    2024年01月23日
    浏览(51)
  • this is incompatible with sql_mode=only_full_group_by

    查看配置 select @@global.sql_mode 在sql命令行中输入select @@sql_mode 能够看到sql_mode配置,如果有ONLY_FULL_GROUP_BY,则需要修改 在mysql5.7.5后,ONLY_FULL_GROUP_BY是默认选项,所以就会导致group by的问题 set sql_mode=‘复制去掉ONLY_FULL_GROUP_BY’; 当然这样处理也只是暂时的,要想永久的处理还得去

    2024年02月15日
    浏览(46)
  • SQL语句错误this is incompatible with sql_mode=only_full_group_by解决方法

    一、原理层面 这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题: mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了\\\"SQL92标准\\\"。 很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。

    2024年01月21日
    浏览(47)
  • 解决MySQL-this is incompatible with sql_mode=only_full_group_by 问题(提供window、Linux、docker解决方法和流程)

    出现这个问题是因为,对于GROUP BY操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。 也就是说如果我分组查询,比如我表里有三个字段 id、name、type,我根据type分组查询,那么结果集里就不能包含name字段。 要想解决这个问题

    2024年02月04日
    浏览(50)
  • mysql sql_mode数据验证检查

    sql_mode 功能 sql_mode 会影响MySQL支持的sql语法以及执行的 数据验证检查 。通过设置sql_mode ,可以完成不同严格程度的数据校验,有效地保障数据准确性 sql_mode 严格模式 VS 宽松模式 宽松模式 比如,插入的数据不满足 表的数据类型,也可能接受,并且不报错,只会有警告而且。

    2024年02月10日
    浏览(45)
  • MySQL运维实战(4.2) 关于SQL_MODE

    作者:俊达 早期,MySQL对一些不符合SQL标准的SQL语句和数据的容忍度比较高,可能会自主地执行或转换一些语句。但是,随着MySQL 5.7的推出,对默认的SQL模式进行了修改,更加强调SQL的合规性,这种变化是为了提高数据一致性和统一SQL标准。系统在升级MySQL版本时,特别是从

    2024年01月17日
    浏览(57)
  • 关系数据库-9-[mysql8]中的语法校验规则sql_mode应用

    Mysql中sql_mode使用详解 sql_mode是一组mysql的语法校验规则,定义了mysql应该支持的sql语法、数据校验等。 1.3.1 ANSI模式 这是一种宽松模式,该模式下,会对所操作数据进行校验,如果不符合校验规则,数据会按照规则执行,并报warning警告。 1.3.2 STRICT_TRANS_TABLES模式 这是一种严格

    2024年02月02日
    浏览(49)
  • MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

    作者:俊达 在MySQL中,默认情况下,反斜杠()被用作转义字符,转义反斜杠()后一个字符;当设置NO_BACKSLASH_ESCAPES后,反斜杠()将不作为转义字符,而被视为普通字符。 下面是一个示例,说明了这两种情况的区别: 未设置NO_BACKSLASH_ESCAPES模式 设置NO_BACKSLASH_ESCAPES 总之,N

    2024年01月23日
    浏览(58)
  • MySQL运维实战(4.4) SQL_MODE之STRICT_TRANS_TABLES和STRICT_ALL_TABLES

    作者:俊达 在MySQL中,STRICT模式主要用于控制数据库的行为,有助于保持数据的一致性和完整性,特别是在涉及到数据写入、更新和其他操作时的约束。 如果设置STRICT模式,MySQL会更加严格地执行数据写入和更新等操作,当数据不符合字段定义或者违反了约束条件,MySQL将抛

    2024年01月18日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包