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が使用されるようにする必要があります。