Prismaの文字列型からSQL VARCHARとTEXTへの変換

Prisma Stringフィールドがどのようにに SQL VARCHARとTEXT型にマッピングされるかを理解します。PostgreSQL、MySQL、SQLiteにまたがる正確なSQL型を制御する@dbアノテーションについて解説します。

Field Types

詳細な説明

文字列型のマッピング

PrismaのString型は、ダイアレクトと指定する@db.アノテーションに応じて異なるSQLカラム型にマッピングされる汎用的なテキスト型です。

デフォルトのマッピング

@db.アノテーションなしの場合、Stringは以下にマッピングされます:

  • PostgreSQL: VARCHAR(255)
  • MySQL: VARCHAR(255)
  • SQLite: VARCHAR(255)

@dbアノテーションの使用

Prismaのネイティブデータベース型アノテーションを使って、正確なSQL型を制御できます:

model Article {
  id      Int    @id @default(autoincrement())
  title   String @db.VarChar(200)
  slug    String @db.VarChar(100) @unique
  content String @db.Text
  code    String @db.Char(6)

  @@map("articles")
}

生成されるSQL(PostgreSQL)

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title VARCHAR(200) NOT NULL,
  slug VARCHAR(100) NOT NULL UNIQUE,
  content TEXT NOT NULL,
  code CHAR(6) NOT NULL
);

アノテーションリファレンス

Prismaアノテーション PostgreSQL MySQL SQLite
String(デフォルト) VARCHAR(255) VARCHAR(255) VARCHAR(255)
@db.Text TEXT TEXT TEXT
@db.VarChar(n) VARCHAR(n) VARCHAR(n) VARCHAR(n)
@db.Char(n) CHAR(n) CHAR(n) CHAR(n)
@db.Uuid UUID VARCHAR(36) VARCHAR(36)

UUIDフィールド

UUID主キーには、PostgreSQLのネイティブUUID型を持つPrismaの@db.Uuidアノテーションが特に有用です:

model Session {
  id String @id @default(uuid()) @db.Uuid
}

PostgreSQLではid UUID PRIMARY KEY DEFAULT gen_random_uuid()が生成されます。

ユースケース

ブログプラットフォームのスキーマをPrismaで定義する際、既存のデータベースカラム仕様に合わせて、長文コンテンツにはTEXT、タイトルやスラッグには特定の長さのVARCHARが使用されるようにする必要があります。

試してみる — Prisma to SQL Schema

フルツールを開く