























在 MySQL 8 中,ONLY_FULL_GROUP_BY 是默认启用的 SQL 模式之一。如果你希望禁用 ONLY_FULL_GROUP_BY,可以通过以下几种方式实现:
你可以通过修改当前会话的 sql_mode 来临时禁用 ONLY_FULL_GROUP_BY。
查看当前的 sql_mode:
SELECT @@sql_mode;
输出可能类似于:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
移除 ONLY_FULL_GROUP_BY:
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
验证是否已移除:
SELECT @@sql_mode;
输出中不应再包含 ONLY_FULL_GROUP_BY。
如果你希望全局禁用 ONLY_FULL_GROUP_BY,可以修改全局的 sql_mode。
查看当前的全局 sql_mode:
SELECT @@GLOBAL.sql_mode;
移除 ONLY_FULL_GROUP_BY:
SET GLOBAL sql_mode = (SELECT REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
验证是否已移除:
SELECT @@GLOBAL.sql_mode;
如果你希望永久禁用 ONLY_FULL_GROUP_BY,可以通过修改 MySQL 配置文件来实现。
打开 MySQL 配置文件:
/etc/my.cnf 或 /etc/mysql/my.cnfmy.ini找到 [mysqld] 部分,修改或添加 sql_mode 配置项,移除 ONLY_FULL_GROUP_BY。例如:
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
保存文件并重启 MySQL 服务:
Linux 系统:
sudo systemctl restart mysql
Windows 系统:
通过服务管理器重启 MySQL 服务。
验证是否生效:
SELECT @@sql_mode;
ONLY_FULL_GROUP_BY 后,MySQL 允许在 GROUP BY 查询中使用未明确分组的非聚合列。这可能导致查询结果不确定或不准确,因此需要谨慎使用。ONLY_FULL_GROUP_BY 启用,以确保查询的准确性和一致性。ONLY_FULL_GROUP_BY 后,某些在严格模式下会报错的查询可能会正常运行,但结果可能不符合预期。SET SESSION sql_mode。SET GLOBAL sql_mode。 根据你的需求选择合适的方法,但请务必注意禁用 ONLY_FULL_GROUP_BY 可能带来的数据准确性问题。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。