无法禁用ONLY_FULL_GROUP_BY

问题描述 投票:0回答:2

我在 MySQL 5.7.14 上遇到了 ONLY_FULL_GROUP_BY 的问题,即使我设置了 SQL 模式,我似乎也无法禁用它。

我已通过运行以下命令将 @@sql_mode 设置为删除 ONLY_FULL_GROUP_BY:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

我还更新了 my.cnf 文件以通过设置 sql-mode 参数来排除它。

如果我运行

select @@sql_mode
,我可以看到 ONLY_FULL_GROUP_BY 不再设置。

但是,当我运行存储过程时,我仍然收到此错误:

1055 Expression #1 of SELECT list is not in GROUP BY clause and contains
nonaggregated column 'product_id' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我在这里缺少什么? SP 会忽略 sql 模式吗?

我不想修改 SP 代码,因为它是从第 3 方模块(针对 Magento)安装的,如果我们想升级,这会导致问题。

这是我本地开发服务器的 WAMP 上。

php mysql magento stored-procedures
2个回答
14
投票

对于遇到同样问题的人来说,事实证明,sql 模式是与存储过程一起存储的,因此即使我正确更改了 sql 模式,它也根本不会更新 SP。为了解决这个问题,我只是在设置新的 sql 模式时删除并重新创建了存储过程。现在可以正常使用了!


2
投票

要修复此错误:删除并重新创建存储过程。之后就可以工作了。

USE `your_schema_name`;
DROP procedure IF EXISTS `your_sp_name`;

DELIMITER $$
USE `your_schema_name`$$
CREATE  PROCEDURE `your_sp_name`(IN `your_input` VARCHAR(50))
BEGIN

-- sp data here

END$$
DELIMITER ;
© www.soinside.com 2019 - 2024. All rights reserved.