如何在MySQL或Sequelize中禁用only_full_group_by

时间:2016-03-09 04:19:35

标签: mysql sequelize.js

在Sequelize中,我如何做相当于SET sql_mode=''以避免出现以下错误?

  

SequelizeDatabaseError: ER_WRONG_FIELD_WITH_GROUP: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'assets.group_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

或者,我如何更改MySQL的默认配置,使sql_mode始终为''

谢谢!

3 个答案:

答案 0 :(得分:7)

试试这个:

SET GLOBAL sql_mode = '';

答案 1 :(得分:5)

获取现有的sql_mode并仅删除ONLY_FULL_GROUP_BY值,而不是将其完全清空。

SELECT @@sql_mode; -- Get the current sql_mode

您可能会得到如下结果;

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

现在从结果中删除ONLY_FULL_GROUP_BY并更新sql_mode

SET GLOBAL sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
SET SESSION sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

现在你已经完成了。

请注意,SET GLOBAL将更新全局设置,该设置在您重新启动mysql服务器或服务之前不会生效。 即使不重新启动mysql服务器,SET SESSION也会立即对您当前的会话产生此影响。因此,您可以根据需要使用其中一个或两个。

或者,不是禁用此设置,而是从MySQL 5.7开始,您只需在任何字段引发错误时使用ANY_VALUE函数修改查询。例如,您发布的错误消息中提到的ANY_VALUE(assets.group_id)

答案 2 :(得分:0)

在遵循其他答案之后, 注意 如果更改 sql_mode,它不会影响存储过程。 sql_mode 与 SP 本身一起存储,因此您需要在 sql_mode 更改后删除并再次执行 SP