SQL INSERT文でのブーリアン値

JSONのtrue/false値がMySQL(TINYINT)、PostgreSQL(BOOLEAN)、SQLite、SQL Server(BIT)で各SQLブーリアンにどう変換されるかを解説します。

Data Types

詳細な説明

ダイアレクト間のブーリアン変換

JSONのブーリアン(truefalse)は、データベースダイアレクトによって異なる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として格納されたフィーチャーフラグ設定をリレーショナルデータベースに移行しており、各ターゲットデータベースダイアレクトに対してブーリアンフィールドを正しく型付けする必要がある場合。

試してみる — JSON to Bulk INSERT

フルツールを開く