mysql永久去除only_full_group_by的方法
时间: 2023-07-22 11:09:26 浏览: 404
你可以通过修改 MySQL 的配置文件来永久去除 `ONLY_FULL_GROUP_BY` 的严格模式。以下是具体的步骤:
1. 打开 MySQL 的配置文件,通常位于 `/etc/mysql/my.cnf` 或者 `/etc/my.cnf`。
2. 找到 `[mysqld]` 部分,在该部分下添加或修改以下行:
```
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
```
3. 保存并关闭配置文件。
4. 重启 MySQL 服务器,使更改生效。可以使用以下命令:
```
sudo service mysql restart
```
在完成上述步骤后,MySQL 将不再使用 `ONLY_FULL_GROUP_BY` 的严格模式。请注意,这种修改可能会影响其他 SQL 查询的行为,因此请确保在做出更改之前了解其潜在影响。
相关问题
mysql 禁用 ONLY_FULL_GROUP_BY,暂时解决错误(sql_mode=only_full_group_by)
在 MySQL 中,ONLY_FULL_GROUP_BY 是一种 SQL mode,它要求在 GROUP BY 子句中使用的字段必须在 SELECT 子句中出现,或者是聚合函数(如 COUNT、SUM 等)的参数。
如果你的 MySQL 服务器启用了 ONLY_FULL_GROUP_BY 模式,那么当你尝试执行一个违反这个规则的查询时,就会出现错误,提示 "Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column"。
如果你确定你的查询逻辑不需要满足 ONLY_FULL_GROUP_BY 模式的要求,可以通过修改 sql_mode 参数来禁用这个模式。具体方法如下:
1. 使用 root 用户登录 MySQL 服务器。
2. 执行以下命令查看当前 sql_mode 参数的值:
```sql
SELECT @@sql_mode;
```
3. 复制查询结果中的值,备份一下原来的 sql_mode 参数值,以便需要时可以恢复。
4. 执行以下命令修改 sql_mode 参数,删除其中的 ONLY_FULL_GROUP_BY:
```sql
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
```
注意:上面的命令中,只保留了 STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO 和 NO_ENGINE_SUBSTITUTION 这些参数,将 ONLY_FULL_GROUP_BY 参数删除了。
5. 再次执行以下命令查看当前 sql_mode 参数的值,确认是否已经成功移除了 ONLY_FULL_GROUP_BY:
```sql
SELECT @@sql_mode;
```
如果查询结果中已经不包含 ONLY_FULL_GROUP_BY 参数,那么说明修改成功。
注意:禁用 ONLY_FULL_GROUP_BY 模式可能会导致某些查询结果不正确,因此应该在确保没有影响到业务逻辑的情况下才进行修改。
mysql8关闭only_full_group_by
要关闭MySQL 8中的ONLY_FULL_GROUP_BY模式,你可以按照以下步骤进行操作:
1. 打开MySQL的配置文件。在MySQL中,配置文件通常是my.ini(Windows)或my.cnf(Linux)。
2. 查找并删除配置文件中的ONLY_FULL_GROUP_BY选项。你可以使用文本编辑器搜索并删除包含ONLY_FULL_GROUP_BY的行。
3. 将以下配置添加到配置文件的[mysqld]部分:
```
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
```
确保使用单引号将配置值括起来。
4. 保存并关闭配置文件。
5. 重新启动MySQL服务以使配置更改生效。在Windows中,你可以使用以下命令停止和启动MySQL服务:
```
net stop mysql
net start mysql
```
在Linux中,你可以使用以下命令来重启MySQL服务:
```
sudo systemctl restart mysql
```
这些步骤将使MySQL 8关闭ONLY_FULL_GROUP_BY模式,并使用新的配置值重新启动。这样,你的查询就不再需要在GROUP BY子句中显式包含所有的选择列了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Mysql 关闭ONLY_FULL_GROUP_BY](https://blog.csdn.net/hello123yy/article/details/107618475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文