TypeORM使用migration:generate时误删重建列的问题解决
解决TypeORM生成迁移时重复删除重建列的问题
问题核心是实体定义和数据库实际表结构不匹配,TypeORM的migration:generate命令会严格对比两者的字段属性(nullable、长度、类型等),只要存在差异,就会生成删除再重建列的操作。
以下是调整后的实体代码,完全对齐数据库DDL的定义:
@Entity({ name: 'users', }) export class UserModel { @PrimaryGeneratedColumn() id: TUserID; // 数据库login为NOT NULL,移除nullable: true,保留length:50 @Column({ length: 50, nullable: false }) login: string; // 数据库name是varchar(255) NOT NULL,显式指定length @Column({ length: 255, nullable: false }) name: string; @Column({ length: 50, nullable: true }) surname: string; // 数据库patronymic是varchar(255) NULL,修正length为255 @Column({ length: 255, nullable: true }) patronymic: string; // 数据库mail是varchar(255) NOT NULL,修正length为255 @Column({ length: 255, nullable: false }) mail: string; // 数据库password是varchar(255) NOT NULL,显式指定length和nullable @Column({ length: 255, nullable: false }) password: string; // 数据库存在phone字段,实体未定义,需保留则添加 @Column({ length: 255, nullable: true }) phone: string; }
关键调整说明:
- login字段:数据库中是
NOT NULL,原实体错误设置了nullable: true,这是触发删列的核心差异之一 - password字段:原实体未指定length,虽默认可能为255,但显式定义可避免TypeORM版本差异导致的误判
- mail、patronymic字段:原实体length与数据库实际长度不匹配,需修正为255
- phone字段:数据库表存在该字段但实体未定义,若不需要删除该字段,必须在实体中补充定义
调整完成后重新运行migration:generate,TypeORM将检测不到字段差异,不会再生成删除重建列的操作。
内容的提问来源于stack exchange,提问作者Alexander Kiselev
相关产品推荐
相关产品推荐

