使用nestjs和typeorm开发时,启用synchronize: true,
后。实体字段比如title是string类型,数据库的title是varchar(1024)
这样会导致数据消失,因为string对应的是varchar(255)
(经过本人测试)。字段默认string,数据库varchar(255)
,数据不会丢失
解决办法:
- 使用装饰器将实体的
varchar
字符数和数据库的字符数改为一致@Column('varchar', { length: 1024 })
,必须完全对应,少一多一字符都不行!!!
import { Column, Entity, PrimaryGeneratedColumn, Unique } from 'typeorm';
@Entity('book')
export class Book {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Unique(['fileName'])
fileName: string;
@Column('varchar', { length: 1024 })
cover: string;
@Column('varchar', { length: 1024 })
title: string;
// 不指定数据会丢失
@Column('varchar', { length: 1024 })
author: string;
// 数据不会丢失
@Column()
publisher: string;
@Column()
bookId: string;
@Column()
category: number;
@Column()
categoryText: string;
@Column('varchar', { length: 10 })
language: string;
@Column()
rootFile: string;
}