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

NodeJS Sequelize模型timestamps选项在MSSQL中生成多余列求助

解决Sequelize中timestamps选项被忽略的问题

嘿,我之前用Sequelize对接MSSQL的时候也碰到过一模一样的坑!你遇到的问题核心其实不在模型文件,而是在迁移文件上——Sequelize-cli的db:migrate命令是根据迁移文件来创建/修改表结构的,模型里的timestamps: false不会自动同步到迁移文件里。

下面是具体的排查和解决步骤:

1. 检查并修改对应的迁移文件

去你的项目根目录下的migrations文件夹,找到创建users表的那个迁移文件(文件名一般是[时间戳]-create-user.js)。你会发现文件里大概率还保留着createdAt和updatedAt的字段定义,就像这样:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('users', {
      user_ID: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      username: {
        type: Sequelize.STRING,
        allowNull: false
      },
      password: {
        type: Sequelize.STRING,
        allowNull: false
      },
      date_created: {
        type: Sequelize.DATE,
        allowNull: false
      },
      // 就是这两行在搞事情!
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('users');
  }
};

把createdAt和updatedAt这两个字段的定义完全删掉,保存文件。

2. 重新执行迁移操作

先回滚之前的迁移(如果已经执行过):

npx sequelize-cli db:migrate:undo

然后再重新执行迁移:

npx sequelize-cli db:migrate

这时候去MSSQL里看users表,就不会再自动生成createdAt和updatedAt列了。

3. 后续生成模型的注意事项

以后用sequelize-cli生成模型的时候,记得加上--no-timestamps参数,这样迁移文件就不会默认添加时间戳字段了:

sequelize model:generate --name User --attributes userID:integer,username:string,password:string,dateCreated:date --no-timestamps

简单来说,模型文件主要是给Sequelize的ORM操作使用的,而数据库表结构的变更完全由迁移文件控制——这是很多新手容易混淆的点,我当初也踩过这个坑 😂

内容的提问来源于stack exchange,提问作者IAskQuestions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:42:15