如何解决MySQL this is incompatible with sql_mode=only_full_group_
|
MySQL this is incompatible with sql_mode=only_full_group_by
代码示例:
在MySQL中,是一个SQL模式设置,它要求在使用时,语句中引用的所有列必须在子句中明确指定,或者是聚合函数的一部分。
这个模式的目的是为了防止产生不确定的查询结果。
如果你遇到了的错误,以下是一些解决方案:
1.修改SQL语句
- 确保列表中的所有列要么包含在子句中,要么作为聚合函数的一部分。
- 例如,如果你的查询是这样的:
- SELECT column1, column2 FROM table GROUP BY column1;
复制代码
2.使用聚合函数
- 对于列表中不在子句中的列
- 可以使用聚合函数,如,,,等
3.禁用ONLY_FULL_GROUP_BY
- 你可以在会话级别或全局级别禁用。
- 这可以通过以下命令完成:
- SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
复制代码
- 或者,你可以修改MySQL的配置文件(例如或)
- 去掉:
- [mysqld]
- sql_mode = NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
复制代码
- 修改配置文件后,需要重启MySQL服务以使更改生效。
4.使用ANY_VALUE()函数
- 函数可以用来选择每个分组的任意值
- 这在某种程度上可以绕过的限制
5.永久修改sql_mode
- 在某些情况下,如果你不希望每次重启MySQL服务后都要重新设置,你可以将更改永久化到MySQL的配置文件中。
- 请注意,禁用可能会让你的查询结果变得不确定,因为MySQL将不再强制要求子句包含所有非聚合列。
- 因此,在禁用这个模式之前,最好先评估一下它对你的查询逻辑和结果的影响。
如果你正在使用MySQL 8.0或更高版本,并且尝试修改时遇到了问题,比如出现了错误:- ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
复制代码
- 这是因为在MySQL 8.0及以上版本中,已经被移除。
- 在这种情况下,你需要从中移除这个值。
- 在处理这个问题时,建议先尝试修改SQL语句以符合的要求,因为这是最安全的做法,可以避免潜在的数据一致性问题。
- 如果这不可能或者不切实际,那么再考虑禁用。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.jb51.net/database/331030kab.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2024-11-26 08:54:22
举报
回复
分享
|
|
|
|