MySQL:5.6升级到5.7的sql_mode

异常

GROUP BY 语句报错

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决方案

在mysql数据库中执行sql,查看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,修改配置文件中的sql_mode

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

sql_mode简介

  • IGNORE_SPACE
    允许函数名称和(字符之间的空格 。这会导致内置函数名称被视为保留字。因此,必须引用与函数名称相同的标识符。

  • STRICT_TRANS_TABLES
    如果无法将值插入事务表中,则中止该语句。对于非事务性表,如果值出现在单行语句或多行语句的第一行中,则中止该语句。更多细节将在本节后面给出。

  • NO_ZERO_IN_DATE
    该NO_ZERO_IN_DATE模式会影响服务器是否允许年份部分为非零但月份或日期部分为0的日期。(此模式会影响日期,例如’2010-00-01’或 ‘2010-01-00’,但不会 ‘0000-00-00’。要控制服务器是否允许’0000-00-00’,请使用该 NO_ZERO_DATE模式。)效果的NO_ZERO_IN_DATE 还取决于是否启用严格的SQL模式。

  • NO_ZERO_DATE
    该NO_ZERO_DATE模式会影响服务器是否允许 ‘0000-00-00’作为有效日期。它的效果还取决于是否启用了严格的SQL模式。

  • ERROR_FOR_DIVISION_BY_ZERO
    该 ERROR_FOR_DIVISION_BY_ZERO 模式影响除零处理,包括 。对于数据更改操作(, ),其效果还取决于是否启用了严格的SQL模式。 MOD(N,0)INSERTUPDATE

  • NO_ENGINE_SUBSTITUTION
    在诸如 CREATE TABLE 或 ALTER TABLE 指定禁用或未编译的存储引擎之类的语句时控制默认存储引擎的自动替换。

  • NO_AUTO_CREATE_USER
    GRANT 除非指定了身份验证信息,否则 防止语句自动创建新用户。该语句必须使用 IDENTIFIED BY 或使用身份验证插件指定非空密码 IDENTIFIED WITH。

  • ONLY_FULL_GROUP_BY
    拒绝选择列表, HAVING条件或ORDER BY列表引用未在GROUP BY子句中指定的非聚合列的查询。
请使用浏览器的分享功能分享到微信等