SQL VARCHARとTEXTをSequelize STRINGとTEXTにマッピングする
VARCHAR、CHAR、TEXT、NVARCHARなどのSQL文字列型がSequelizeのDataTypes.STRING、DataTypes.CHAR、DataTypes.TEXTにどのようにマッピングされるかを解説します。
詳細な説明
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 TEXT、LONGTEXT、MEDIUMTEXT、TINYTEXTはすべてDataTypes.TEXTにマッピングされます:
bio TEXT
-- 変換後 -->
bio: { type: DataTypes.TEXT, allowNull: true }
NVARCHARとNCHAR
SQL ServerのNVARCHARのようなUnicode固有の型はDataTypes.STRINGにマッピングされます。SequelizeはUnicodeエンコーディングをカラムレベルではなく接続レベルで処理するためです。
実用的な考慮事項
STRINGとTEXTのどちらを選ぶかでは、STRING(VARCHAR)カラムは効率的にインデックス付けできますが、TEXTカラムは通常インデックスに直接使用できないことを覚えておいてください。カラムで検索やソートが必要な場合は、明示的な長さを持つDataTypes.STRINGを推奨します。
ユースケース
NVARCHARカラムを多用するSQL Serverデータベースを移行しており、Node.jsアプリケーション用に各文字列型がSequelizeのDataTypesにどのように変換されるかを理解する必要がある場合。