SQL INSERT文でのブーリアン値
JSONのtrue/false値がMySQL(TINYINT)、PostgreSQL(BOOLEAN)、SQLite、SQL Server(BIT)で各SQLブーリアンにどう変換されるかを解説します。
Data Types
詳細な説明
ダイアレクト間のブーリアン変換
JSONのブーリアン(trueとfalse)は、データベースダイアレクトによって異なるSQL表現にマッピングされます。Bulk INSERTツールはこれらの違いを自動的に処理します。
ダイアレクト比較
| ダイアレクト | JSON true |
JSON false |
カラム型 |
|---|---|---|---|
| PostgreSQL | TRUE |
FALSE |
BOOLEAN |
| MySQL | TRUE |
FALSE |
TINYINT(1) |
| SQLite | TRUE |
FALSE |
BOOLEAN |
| SQL Server | TRUE |
FALSE |
BIT |
PostgreSQLの例
INSERT INTO "features" ("id", "name", "is_enabled", "is_beta")
VALUES
(1, 'Dark Mode', TRUE, FALSE),
(2, 'API v2', TRUE, TRUE),
(3, 'Webhooks', FALSE, FALSE);
MySQLの例(CREATE TABLE付き)
CREATE TABLE \`features\` (
\`id\` INTEGER NOT NULL,
\`name\` VARCHAR(255) NOT NULL,
\`is_enabled\` TINYINT(1) NOT NULL,
\`is_beta\` TINYINT(1) NOT NULL
);
INSERT INTO \`features\` (\`id\`, \`name\`, \`is_enabled\`, \`is_beta\`)
VALUES
(1, 'Dark Mode', TRUE, FALSE),
(2, 'API v2', TRUE, TRUE);
エッジケース:混合型
JSONキーが異なるオブジェクト間でブーリアンと整数の両方の値を持つ場合、ツールはカラム型をINTEGERと推論します(ブーリアンは0/1として表現できるため)。これはすべてのダイアレクトで動作する保守的な選択です。
SQL ServerのBIT型
SQL ServerのBIT型はブーリアンと意味的に同等ですが、技術的には0と1を受け入れる数値型です。INSERT値はTRUE/FALSEを使用しますが、SQL Serverはこれらをエイリアスとして受け入れます。
ユースケース
JSONとして格納されたフィーチャーフラグ設定をリレーショナルデータベースに移行しており、各ターゲットデータベースダイアレクトに対してブーリアンフィールドを正しく型付けする必要がある場合。