乐闻世界logo
搜索文章和话题

How can I specify column name casing in TypeORM migrations

4 个月前提问
3 个月前修改
浏览次数23

1个答案

1

在TypeORM中,当您创建迁移文件以创建或修改表及其列时,会遇到数据库的大小写敏感性问题。不同的数据库对大小写的处理方式可能不同。例如,在PostgreSQL中,默认情况下,列名是小写的,而在MySQL中,列的大小写取决于服务器的配置(通常是大小写不敏感的)。

为了在TypeORM迁移中指定列名的大小写,您可以在定义实体的时候使用引号来确保列名的大小写被保留。这适用于创建实体时和编写迁移脚本时。请看下面的示例:

假设我们有一个名为UserProfile的实体,并且我们想要确保某些列具有特定的大小写:

typescript
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() export class UserProfile { @PrimaryGeneratedColumn() id: number; @Column({ name: '"FirstName"' }) firstName: string; @Column({ name: '"LastName"' }) lastName: string; }

在这个例子中,我们给firstNamelastName两个列分别指定了"FirstName""LastName"作为数据库中的列名,包括在内的双引号确保了列名的大小写在数据库中创建时得到保留。

接着,如果您需要手动编写TypeORM迁移来创建或修改表和列,同样需要使用引号来保持大小写的准确性。例如:

typescript
import { MigrationInterface, QueryRunner } from 'typeorm'; export class CreateUserProfilesTable1589983924164 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.query( `CREATE TABLE "user_profiles" ( "id" SERIAL NOT NULL, "FirstName" character varying NOT NULL, "LastName" character varying NOT NULL, CONSTRAINT "PK_a24972a9f12a2b146b1a6e54560" PRIMARY KEY ("id") )` ); } public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(`DROP TABLE "user_profiles"`); } }

在这个迁移脚本中,我们创建了一个新表user_profiles,并确保FirstNameLastName列的大小写被保留。

确保在编写TypeORM迁移时始终考虑到数据库的大小写敏感性,并根据数据库的具体需求来决定是否需要使用引号。这样可以避免在不同环境或不同数据库之间迁移时遇到问题。

2024年6月29日 12:07 回复

你的答案