linux sql_mode=only_full_group_by
时间: 2025-06-29 19:02:16 浏览: 10
### 修改 Linux 环境下的 MySQL `sql_mode` 设置
在 Linux 中调整 MySQL 的 SQL 模式可以通过编辑配置文件来实现。对于不同的 MySQL 版本,配置文件的位置可能会有所不同。
#### 查找并编辑 MySQL 配置文件
通常情况下,MySQL 的主要配置文件位于 `/etc/my.cnf` 或者 `/etc/mysql/my.cnf` 文件中[^1]。某些发行版也可能使用其他位置如 `/usr/local/mysql/etc/my.cnf` 或者特定于实例的配置文件。
为了禁用或自定义 `ONLY_FULL_GROUP_BY` 行为,可以在 `[mysqld]` 节点下找到现有的 `sql_mode` 参数,并对其进行修改:
```ini
[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` 外的所有默认模式,则可以先查看当前有效的 SQL 模式列表,再从中移除不需要的部分[^3]。
#### 应用更改后的配置
完成上述操作之后,保存文件并对 MySQL 服务重启以使改动生效:
```bash
sudo systemctl restart mysqld.service
```
或者根据具体环境使用相应的命令启动/停止 MySQL 服务器进程。
#### 动态设置 `sql_mode`
除了通过配置文件静态设定外,还可以直接登录到 MySQL 客户端执行以下命令临时改变 session 或 global 层面的 `sql_mode` 值:
```sql
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
-- OR FOR SESSION LEVEL CHANGES USE:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
这允许在不触及全局配置的前提下测试去除该选项的效果[^4]。
#### 注意事项
当关闭 `ONLY_FULL_GROUP_BY` 后虽然解决了现有查询兼容性问题,但也意味着放弃了对非确定性结果集的安全保障机制。因此建议开发者尽可能遵循标准语法编写 SQL 查询语句,确保每条 SELECT 子句中的列要么出现在 GROUP BY 列表里,要么被包含在一个聚合函数内[^5]。
阅读全文
相关推荐


















