You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:40:35