首页 > 解决方案 > 即使禁用了严格模式,MySQL 错误 1055

问题描述

即使禁用了严格模式,我在运行存储过程时仍然收到 ERROR 1055

在带有 MySQL 5.7.26 的 Ubuntu 19.04 上,我已经尝试了 my.cnf 中 sql-mode 选项的所有组合,并设置了全局,这很有意义。只包括 sql-mode = '',但它仍然表现得好像严格模式已打开。

mysql> SHOW VARIABLES LIKE 'sql_mode';
| Variable_name | Value
| sql_mode      | IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

甚至 sql-mode 为空

mysql> SHOW VARIABLES LIKE 'sql_mode';
| Variable_name | Value |
| sql_mode      |       |

我收到 only_full_group_by 仍然存在的错误...

mysql> CALL getReadyToInvoiceOrders(480,-1,-1,'','','','','','');
ERROR 1055 (42000): Expression #14 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'axistms_transport_local.BPBCR.currentAwardedID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

您可以看到“STRICT_TRANS_TABLES”和“ONLY_FULL_GROUP_BY”已被删除,但 ERROR 1055 仍然存在

标签: mysql

解决方案


删除子句 ONLY_FULL_GROUP_BY :

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

MySQL 5.7 版本中 sql_mode 的默认设置为 ONLY_FULL_GROUP_BY、NO_AUTO_CREATE_USER、STRICT_TRANS_TABLES、NO_ENGINE_SUBSTITUTION


推荐阅读