我在 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 上。
对于遇到同样问题的人来说,事实证明,sql 模式是与存储过程一起存储的,因此即使我正确更改了 sql 模式,它也根本不会更新 SP。为了解决这个问题,我只是在设置新的 sql 模式时删除并重新创建了存储过程。现在可以正常使用了!
要修复此错误:删除并重新创建存储过程。之后就可以工作了。
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 ;