错误 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_BY
的 sql_mode
标志来强制标准行为。在最近的版本中,他们默认打开了该标志。当你将本地 MySQL 升级到 5.7.14 时,标志已打开,你的生产代码(取决于旧扩展程序)停止工作。
如果你最近开始收到 1055 个错误,你有什么选择?
- 修复有问题的 SQL 查询,或让他们的作者去做。
- 使用你使用的应用程序软件回滚到与开箱即用的 MySQL 兼容版本。
- 更改服务器的
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
,然后重新启动服务器。