博客
关于我
MySQL sql_mode=only_full_group_by问题解决办法
阅读量:798 次
发布时间:2023-02-10

本文共 1124 字,大约阅读时间需要 3 分钟。

在服务器数据库查询中使用了GROUP BY语句,结果却报出了以下错误:

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'csc_risk.a.DefaultDate' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by, Time: 0.035000s

于是,将部分数据迁移到本地进行测试。发现SQL语句可以正常执行,并查看了数据库版本。

原因分析:

MySQL 5.7版本默认设置了mysql sql_mode = only_full_group_by属性,导致报错。

验证数据版本:

为了确认是否是数据版本问题,查询版本信息:

SELECT VERSION()

结果显示数据库版本为5.7.24。

解决方法:

了解到原因后,解决方案如下:

  • 查看当前SQL模式:

    查询SQL模式设置:

    SELECT @@sql_mode;

    返回值为:

    ONLY_FULL_GROUP_BY,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模式:

    为避免再次出现类似问题,可以通过以下命令关闭only_full_group_by模式:

    SET @@global.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模式设置,对于新建的数据库有效。如果是已有数据库,则需要在对应数据库中执行类似操作:

    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';
  • 通过上述步骤,可以解决GROUP BY语句在MySQL 5.7版本下的兼容性问题。

    转载地址:http://orffk.baihongyu.com/

    你可能感兴趣的文章
    MySQL in 太多过慢的 3 种解决方案
    查看>>
    MySQL InnoDB 三大文件日志,看完秒懂
    查看>>
    Mysql InnoDB 数据更新导致锁表
    查看>>
    Mysql Innodb 锁机制
    查看>>
    MySQL InnoDB中意向锁的作用及原理探
    查看>>
    MySQL InnoDB事务隔离级别与锁机制深入解析
    查看>>
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL JOIN原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>