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_INCREMENTserial()にマッピングします。

ブーリアンとしての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ビルダーにどのように変換されるかを理解する必要がある場合。

試してみる — SQL to Drizzle Schema

フルツールを開く