技术文摘
MySQL 中 ONLY_FULL_GROUP_BY 如何禁用
MySQL 中 ONLY_FULL_GROUP_BY 如何禁用
在 MySQL 数据库的使用过程中,ONLY_FULL_GROUP_BY 这个模式常常会给开发者带来一些困扰。ONLY_FULL_GROUP_BY 模式要求在使用 GROUP BY 语句时,SELECT 子句中的所有非聚合列必须包含在 GROUP BY 子句中,否则就会抛出错误。这在某些复杂查询场景下,限制了我们的灵活性,所以很多时候需要将其禁用。那么,如何在 MySQL 中禁用 ONLY_FULL_GROUP_BY 呢?
我们可以通过修改 MySQL 的配置文件来实现。对于不同的操作系统,配置文件的位置可能有所不同。在 Linux 系统下,通常配置文件路径为 /etc/mysql/mysql.conf.d/mysqld.cnf。找到配置文件后,打开它并在 [mysqld] 部分添加或修改以下内容:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
这里移除了 ONLY_FULL_GROUP_BY 模式。修改完成后,保存文件,然后重启 MySQL 服务,使配置生效。
除了修改配置文件,我们还可以在 MySQL 会话级别禁用 ONLY_FULL_GROUP_BY。在进入 MySQL 客户端后,使用以下命令:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
这条命令会临时移除当前会话中的 ONLY_FULL_GROUP_BY 模式。不过需要注意的是,这种方式只对当前会话有效,一旦会话结束,模式会恢复到原来的设置。
如果希望在全局级别禁用 ONLY_FULL_GROUP_BY,可以使用以下命令:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
执行该命令后,所有新创建的会话都会受到影响。但要注意,这需要有足够的权限,并且修改全局配置可能会对整个系统产生影响,需谨慎操作。
在实际开发中,禁用 ONLY_FULL_GROUP_BY 虽然能带来一定便利,但也可能导致查询结果不符合预期,所以要根据具体业务需求和数据情况来决定是否禁用,以及如何禁用。掌握这些禁用方法,能帮助我们在 MySQL 开发中更加得心应手。
TAGS: MySQL 数据库配置 禁用方法 ONLY_FULL_GROUP_BY
- Discuz!能否实现用户组互动与积分答题功能
- Go接口能否声明属性
- PHP 在线发送邮件问题如何解决
- GORM连接SQL Server数据库时密码含@符号的解决方法
- Django打造的书签管理软件
- PHP调用接口返回为空的解决方法
- Python 列表数组的数据存储量究竟有多大
- Go组合结构体:方法如何访问子结构体字段
- 利用数据库字段值动态添加HTML Class的方法
- 在JavaScript中怎样用空格填充字符串或数组
- PHP 中 session_start() 函数是否必要
- Gorm连接SQL Server数据库时密码含“@”致连接失败的解决办法
- Hexo 生成类似 Gorm 开发指南的方法
- Python自定义函数仅输出第一行结果的解决方法
- Golang JSON解析之将一组字节数组解析成结构体难题