sql_model=only_full_group_by
时间: 2023-10-15 09:31:13 浏览: 44
SQL中的 `only_full_group_by` 是一个严格模式下的选项。它要求在使用 `GROUP BY` 子句进行分组查询时,选择的列必须是 `GROUP BY` 子句中出现的列或者使用聚合函数进行运算的列。
如果未启用 `only_full_group_by` 模式,MySQL 数据库在执行分组查询时会对结果集进行自动处理。例如,如果在 `GROUP BY` 子句中指定了一个列,但查询的 `SELECT` 列表中还包含其他列,MySQL会自动选择第一个出现的值而不报错。
启用 `only_full_group_by` 模式可以提高数据的准确性,避免不符合标准的查询结果。然而,这也可能导致一些旧的查询无法正常执行,因为它们可能违反了严格的分组规则。
如果你想禁用 `only_full_group_by` 模式,可以在查询之前执行以下语句:
```
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
这将从当前的 SQL 模式中移除 `ONLY_FULL_GROUP_BY` 选项。请注意,在修改数据库的全局配置之前,确保你理解这个选项的影响,并且明确你的需求和风险。
相关问题
sql_mode=only_full_group_by
在MySQL 5.7版本后,默认开启了SQL_MODE严格模式,其中一个选项是sql_mode=only_full_group_by。这个模式要求在进行group by聚合操作时,select语句中的列只能是出现在group by中的列或者使用聚合函数(如max()、min()等)。如果不符合这个规则,就会报错。
为了解决这个问题,你可以按照下面的方法进行操作:
1. 在MySQL配置文件中的[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'。这样可以将sql_mode的设置更改为允许使用所有的模式,包括only_full_group_by。
2. 修改你的SQL语句,确保select中的列要么是出现在group by中的列,要么是使用了聚合函数。例如,你可以修改你的SQL语句为:select uid from user_order group by uid; 这样就不会再报错了。
3. 如果你不想修改MySQL的全局配置,你可以在每个需要执行的SQL语句前加上SET sql_mode='';来临时关闭严格模式。这样在执行完这个语句后,严格模式就会恢复。但这种方法并不推荐,因为可能会导致其他的潜在问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [MySQL提示sql_mode=only_full_group_by解决办法](https://blog.csdn.net/M__L__/article/details/126806559)[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_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
MysqlSyntaxErrorException whits is incompatible with sql_model=only_full_group by
这个错误通常是由于 MySQL 的严格模式(strict mode)导致的。在 strict mode 下,如果 SELECT 语句中的列没有在 GROUP BY 子句中出现,或者在 SELECT 中使用了聚合函数但没有在 GROUP BY 子句中出现,就会报错。解决方法是要么将查询语句改为符合 strict mode 的语法,要么关闭 strict mode。
关闭 strict mode 的方法是在 MySQL 配置文件中添加以下内容:
```
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
```