SQL VARCHARとTEXTをSequelize STRINGとTEXTにマッピングする

VARCHAR、CHAR、TEXT、NVARCHARなどのSQL文字列型がSequelizeのDataTypes.STRING、DataTypes.CHAR、DataTypes.TEXTにどのようにマッピングされるかを解説します。

Basic Models

詳細な説明

SequelizeでのSQL文字列型

SQLデータベースは異なるストレージ特性を持つ複数の文字列型を提供します。Sequelizeはそれぞれに対応するDataTypes定数を提供しており、このコンバーターは一般的なすべてのバリアントを自動的に処理します。

VARCHARからDataTypes.STRINGへ

SQLで最も一般的な文字列型はVARCHAR(n)で、SequelizeではDataTypes.STRING(n)にマッピングされます。長さパラメータは保持されます:

email VARCHAR(255) NOT NULL
-- 変換後 -->
email: { type: DataTypes.STRING(255), allowNull: false }

長さが指定されていない場合(括弧なしのVARCHAR)、コンバーターはデフォルトで255文字のDataTypes.STRINGを使用します。

CHARからDataTypes.CHARへ

固定長のCHAR(n)DataTypes.CHAR(n)にマッピングされます。国コードや通貨コードなどに使用されます:

country_code CHAR(2) NOT NULL
-- 変換後 -->
country_code: { type: DataTypes.CHAR(2), allowNull: false }

TEXTからDataTypes.TEXTへ

無制限テキストの場合、SQL TEXTLONGTEXTMEDIUMTEXTTINYTEXTはすべてDataTypes.TEXTにマッピングされます:

bio TEXT
-- 変換後 -->
bio: { type: DataTypes.TEXT, allowNull: true }

NVARCHARとNCHAR

SQL ServerのNVARCHARのようなUnicode固有の型はDataTypes.STRINGにマッピングされます。SequelizeはUnicodeエンコーディングをカラムレベルではなく接続レベルで処理するためです。

実用的な考慮事項

STRINGTEXTのどちらを選ぶかでは、STRING(VARCHAR)カラムは効率的にインデックス付けできますが、TEXTカラムは通常インデックスに直接使用できないことを覚えておいてください。カラムで検索やソートが必要な場合は、明示的な長さを持つDataTypes.STRINGを推奨します。

ユースケース

NVARCHARカラムを多用するSQL Serverデータベースを移行しており、Node.jsアプリケーション用に各文字列型がSequelizeのDataTypesにどのように変換されるかを理解する必要がある場合。

試してみる — SQL to Sequelize Model

フルツールを開く