Google Cloud SQL MySQL能否禁用ONLY_FULL_GROUP_BY?双方观点谁正确?
问题结论与分析
你的要求(让开发方在SELECT列表添加GROUP BY所需字段)合理,DevOps的说法正确,开发方的理由不成立
关于Cloud SQL的ONLY_FULL_GROUP_BY
- Cloud SQL for MySQL默认强制开启
ONLY_FULL_GROUP_BY,官方明确不支持禁用,所谓“非常规手段”会破坏数据查询的确定性,引发潜在数据风险,DevOps的判断完全正确。这个配置是遵循ANSI SQL标准的,目的是避免查询返回不可预测的结果。
开发方的说法存在错误
ONLY_FULL_GROUP_BY是MySQL的SQL模式,和服务器操作系统(Linux/Windows)没有关系。只要使用相同版本的MySQL,不管是Windows还是Linux环境,开启该模式后的SQL执行规则完全一致,开发方说“修改代码会导致Windows环境无法运行”是站不住脚的。- 开发方的代码依赖关闭
ONLY_FULL_GROUP_BY才能运行,本质是代码不符合SQL标准,属于代码质量问题。你作为甲方,要求他们修改代码适配标准SQL环境,是合理需求,不需要另行签订额外协议(除非当初定制合同明确约定只适配非标准SQL模式,但显然你没有这个约定)。
你的需求是正确方向
- 让开发方在SELECT列表中补充GROUP BY对应的字段,是让代码符合标准SQL的正确做法。修改后的代码不仅能在GCP Cloud SQL正常运行,在他们的Windows服务器MySQL环境(只要开启
ONLY_FULL_GROUP_BY)也能正常工作,完全不存在开发方所说的兼容性问题。
内容的提问来源于stack exchange,提问作者pnpjtr
相关产品推荐
相关产品推荐

