错误 1055 ONLY FULL GROUP by something 不在 GROUP BY 子句中

很长一段时间以来,MySQL 已经包含了一个臭名昭着的非标准扩展到 GROUP BY,它允许以效率的名义进行古怪的行为。这个扩展允许世界各地的无数开发人员在生产代码中使用 GROUP BY 而不完全理解他们在做什么。

特别是,在 GROUP BY 查询中使用 SELECT *是个坏主意,因为标准的 GROUP BY 子句需要枚举列。不幸的是,许多开发人员都这样做了。

读这个。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

MySQL 团队一直试图修复这种错误,而不会弄乱生产代码。他们在 5.7.5 中添加了一个名为 ONLY_FULL_GROUP_BYsql_mode 标志来强制标准行为。在最近的版本中,他们默认打开了该标志。当你将本地 MySQL 升级到 5.7.14 时,标志已打开,你的生产代码(取决于旧扩展程序)停止工作。

如果你最近开始收到 1055 个错误,你有什么选择?

  1. 修复有问题的 SQL 查询,或让他们的作者去做。
  2. 使用你使用的应用程序软件回滚到与开箱即用的 MySQL 兼容版本。
  3. 更改服务器的 sql_mode 以摆脱新设置的 ONLY_FULL_GROUP_BY 模式。

你可以通过执行 SET 命令来更改模式。

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'

如果你在应用程序连接到 MySQL 之后立即执行此操作,应该可以解决问题。

或者,你可以在 MySQL 安装中找到 init 文件 ,找到 sql_mode= 行,并将其更改为省略 ONLY_FULL_GROUP_BY,然后重新启动服务器。