• MySQL查询语句报错 sql_mode=only_full_group_by 问题


    升级MySQL到5.7后,查询语句总是报sql_mode=only_full_group_by问题,总结归纳了两种解决方案,推存第二种解决方案。

      报错信息:
       [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

      问题原因:

      mysql 5.7版本默认sql_mode配置是包括:sql_mode="ONLY_FULL_GROUP_BY",这个配置严格执行了"SQL92标准"。当从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序提示了报错信息。

    解决方案:

      1. sql语句暂时性修改sql_mode,重启mysql数据库服务之后,ONLY_FULL_GROUP_BY报错还会出现

      查看sql_mode
      select @@global.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,重新设置值:

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

      2. 修改MySQL配置文件,彻底解决问题。

      需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性,
      my.cnf位于etc文件夹下,vim下光标移到最后添加如下(Windows是mysql安装目录下面的 my.ini 配置文件):

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

      重启MySQL服务,彻底解决报错。

      重启命令:
      Linux: service mysqld restart         /etc/init.d/mysqld restart
      Windows命令cmd:   net stop mysql         net start mysql

  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/zengming/p/10744206.html
Copyright © 2020-2023  润新知