zoukankan      html  css  js  c++  java
  • SQL Error (1055) sql_mode=only_full_group_by

    报错

    ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'aaa.test.age' which is not functionally dependent on columns in GROUP BY clause; 
    this is incompatible with sql_mode=only_full_group_by

    mysql5.1,不报异常

    mysql5.5,不报异常

    mysql5.6,不报异常

    mysql5.7,报异常

    原因

    原因是因为mysql中对 group by 用法的规定。严格意义上说,就是用了group by之后。select 的字段只能是group by的字段,或者需要加聚合函数的。在 oracle 中,一直有这项约定。所以直接就会报错。但是mysql 直到 5.7 版本之后才把这个要求明确限制起来。

    这种问题两种思路:

    第一修改sql,按照规定的规范重写项目中所有有问题的sql。很明显代价太大。风险很高;不过还未开发时可以严格规范写法。

    第二种那就是把这种限制去掉,让功能继续像5.7之前的样子一样能跑。已经完成的项目用这种,因为第一种代价太大。

    解决方法

    1、改写SQL语句,毕竟上面的写法不是标准的SQL语句

    2、登陆mysql服务器,执行以下命令,在global与session级都修改

    mysql> 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';
    mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

    3、结合第2种方法,在my.cnf文件中,指定sql_mode的值:

    [mysqld]
    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与3结合可不用重启服务器,且即使重启配置也依然有效。

  • 相关阅读:
    shell 知识点
    辅助字符串处理类:org.apache.commons.lang3.StringUtils
    post请求(headers里有属性)报错:Request header field xxx is not allowed by Access-Control-Allow-Headers in preflight response
    vue-cli 打包报错:Unexpected token: punc (()
    遍历对象,并对其中第一个(随机)进行处理
    JavaScript中类似PHP的uniqid()方法
    使用crypto-js的md5加密
    Yarn、MapReduce、spark、storm的关系
    hadoop 知识点
    spring cloud 知识点
  • 原文地址:https://www.cnblogs.com/aeolian/p/12401916.html
Copyright © 2011-2022 走看看