如何为Sequelize.ARRAY(Sequelize.INTEGER)设置正确默认值?
解决Sequelize迁移中ARRAY字段默认值的语法问题
针对你遇到的Sequelize.ARRAY(Sequelize.INTEGER)类型字段设置默认值的问题,正确的设置方式需要根据使用的数据库类型调整:
PostgreSQL(Sequelize对ARRAY支持最优的数据库)
直接用Sequelize.literal包裹空数组的原生SQL语法,让Sequelize直接生成合法的SQL语句:
user_ids: { type: Sequelize.ARRAY(Sequelize.INTEGER), defaultValue: Sequelize.literal('ARRAY[]::INTEGER[]') }
迁移时会生成DEFAULT ARRAY[]::INTEGER[]的合规SQL,避免解析错误。
其他数据库(如MySQL,注意:MySQL无原生ARRAY支持,Sequelize用JSON模拟)
如果使用MySQL这类不原生支持ARRAY的数据库,需将字段类型设为JSON,再设置对应默认值:
user_ids: { type: Sequelize.JSON, defaultValue: Sequelize.literal('JSON_ARRAY()') }
也可以直接用字符串形式的空数组(但更推荐用literal避免转义问题):
user_ids: { type: Sequelize.JSON, defaultValue: '[]' }
之前设置出错的原因
- 直接设
defaultValue: []时,Sequelize会将空数组解析为SQL空值,生成DEFAULT ,这种非法语法。 - 设
defaultValue: [0]时,Sequelize会展开数组为单个值,变成DEFAULT 0,不符合ARRAY类型的语法要求。
内容的提问来源于stack exchange,提问作者Tigran Gabulyan
相关产品推荐
相关产品推荐

