如何在Sequelize中为MySQL的DATEONLY类型列设置当前日期默认值?
在Sequelize中为DATEONLY列设置MySQL CURRENT_DATE默认值
Sequelize原生支持通过Sequelize.literal()直接使用MySQL原生函数作为默认值,之前的报错大概率是写法细节问题,正确实现方式如下:
模型定义写法
在模型中定义列时,直接将defaultValue设为Sequelize.literal('CURRENT_DATE'),示例代码:
const YourModel = sequelize.define('YourModel', { appliedDate: { type: DataTypes.DATEONLY, defaultValue: Sequelize.literal('CURRENT_DATE') } });
迁移脚本写法
如果用迁移添加列,迁移文件中同样使用该写法:
module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.addColumn('your_table_name', 'appliedDate', { type: Sequelize.DATEONLY, defaultValue: Sequelize.literal('CURRENT_DATE') }); }, down: (queryInterface) => { return queryInterface.removeColumn('your_table_name', 'appliedDate'); } };
常见问题说明
- 用
Sequelize.fn('now')报错的原因:now()返回含时间的DATETIME类型,和DATEONLY类型不匹配,触发数据库层面报错。 Sequelize.fn('CURRENT_DATE')写法错误:该函数需要按Sequelize.fn('CURRENT_DATE', [参数])格式调用,但CURRENT_DATE无需参数,直接用literal更简洁。- 这种方式是Sequelize官方推荐的数据库特定语法处理方案,通过
literal()注入原生表达式,完美适配MySQL的CURRENT_DATE需求,无需用JavaScript生成日期做替代。
内容的提问来源于stack exchange,提问作者Maanas O T
相关产品推荐
相关产品推荐

