在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
始终为''
?
谢谢!
答案 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