Drizzle ORMにおけるMySQLカラム型
MySQLカラム型からDrizzle ORM mysql-coreカラムビルダーへのマッピングガイド。auto_increment、tinyint、datetime、json、enumパターンを含みます。
Column Types
詳細な説明
DrizzleにおけるMySQL型マッピング
Drizzleのdrizzle-orm/mysql-coreモジュールは、MySQLの型システムに合わせたカラムビルダーを提供します。MySQLにはPostgreSQLやSQLiteとは異なるユニークな型と慣例があります。
一般的な型マッピング
| MySQL型 | Drizzleビルダー | 例 |
|---|---|---|
INT AUTO_INCREMENT |
serial() |
serial("id") |
INT |
integer() |
integer("count") |
TINYINT |
tinyint() |
tinyint("rank") |
TINYINT(1) |
boolean() |
boolean("active") |
SMALLINT |
smallint() |
smallint("age") |
MEDIUMINT |
mediumint() |
mediumint("value") |
BIGINT |
bigint() |
bigint("total", { mode: "number" }) |
VARCHAR(n) |
varchar() |
varchar("name", { length: 255 }) |
TEXT |
text() |
text("body") |
BOOLEAN |
boolean() |
boolean("flag") |
DATETIME |
datetime() |
datetime("created_at") |
TIMESTAMP |
timestamp() |
timestamp("updated_at") |
DATE |
date() |
date("birth_date") |
JSON |
json() |
json("data") |
DECIMAL(p,s) |
decimal() |
decimal("price", { precision: 10, scale: 2 }) |
FLOAT |
float() |
float("score") |
DOUBLE |
double() |
double("lat") |
MySQL固有のパターン
AUTO_INCREMENT: MySQLのserial()はBIGINT UNSIGNED AUTO_INCREMENTの省略形です。通常の自動インクリメント整数の場合、コンバーターはINT AUTO_INCREMENTをserial()にマッピングします。
ブーリアンとしてのTINYINT(1): MySQLは歴史的にブーリアンを表すためにTINYINT(1)を使用します。コンバーターはこのパターンを認識し、boolean()にマッピングします。
DATETIME vs TIMESTAMP: MySQLはDATETIME(タイムゾーン変換なし)とTIMESTAMP(UTCとして保存)を区別します。コンバーターはそれぞれ対応するDrizzleビルダーにマッピングします。
変換例
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(200) NOT NULL,
total DECIMAL(10, 2) NOT NULL,
is_paid TINYINT(1) DEFAULT 0,
notes JSON,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
生成結果:
import { boolean, datetime, decimal, json, mysqlTable, serial, varchar } from "drizzle-orm/mysql-core";
import { sql } from "drizzle-orm";
export const orders = mysqlTable("orders", {
id: serial("id").primaryKey(),
customerName: varchar("customer_name", { length: 200 }).notNull(),
total: decimal("total", { precision: 10, scale: 2 }).notNull(),
isPaid: boolean("is_paid").default(false),
notes: json("notes"),
createdAt: datetime("created_at").default(sql`CURRENT_TIMESTAMP`),
});
ユースケース
MySQLデータベースをDrizzle ORMに移行しており、TINYINT(1)、DATETIME、AUTO_INCREMENTなどのMySQL固有の型がDrizzleのmysql-coreビルダーにどのように変換されるかを理解する必要がある場合。