JSONブール値のSQL値への変換

JSONブール値(true/false)がデータベースごとに異なるSQL表現にどのようにマッピングされるかを学びます。BOOLEAN型、BIT、TINYINT、方言固有の変換ルールを解説します。

Data Types

詳細な説明

SQLにおけるJSONブール値

JSONにはネイティブのtruefalse値がありますが、SQLデータベースは方言によってブール値を異なる方法で表現します。これらのマッピングを理解することで、正確なデータ挿入が保証されます。

JSONの例

{
  "id": 1,
  "name": "Alice",
  "active": true,
  "verified": false,
  "admin": true
}

PostgreSQL出力

INSERT INTO users (id, name, active, verified, admin)
VALUES (1, 'Alice', TRUE, FALSE, TRUE);

PostgreSQLにはネイティブのBOOLEAN型があり、TRUEFALSE't''f''yes''no'10を受け入れます。

MySQL出力

INSERT INTO users (id, name, active, verified, admin)
VALUES (1, 'Alice', 1, 0, 1);

MySQLのBOOLEANTINYINT(1)のエイリアスです。慣例として1がtrue、0がfalseです。

SQL Server出力

INSERT INTO users (id, name, active, verified, admin)
VALUES (1, 'Alice', 1, 0, 1);

SQL ServerはBIT型を使用し、値は10です。

SQLite出力

INSERT INTO users (id, name, active, verified, admin)
VALUES (1, 'Alice', 1, 0, 1);

SQLiteにはネイティブのブール型がありません。ブール値は整数として格納されます:0(false)と1(true)。

比較表

データベース True False
PostgreSQL BOOLEAN TRUE FALSE
MySQL TINYINT(1) 1 0
SQL Server BIT 1 0
SQLite INTEGER 1 0

CREATE TABLEでのブールカラム

INSERTと一緒にCREATE TABLEを生成する場合、コンバーターはJSONブール値を適切なカラム型にマッピングします:

-- PostgreSQL
CREATE TABLE users (
    active BOOLEAN NOT NULL DEFAULT FALSE
);

-- MySQL
CREATE TABLE users (
    active TINYINT(1) NOT NULL DEFAULT 0
);

エッジケース:ブール文字列

一部のJSONペイロードはブール値を文字列("true""yes""1")としてエンコードします。コンバーターはオプションでこれらのパターンを検出し、文字列リテラルではなく適切なSQLブール値に変換できます。

ユースケース

フィーチャーフラグ設定やユーザー設定データをJSONベースのシステム(Firebase Remote ConfigやNoSQLストアなど)からリレーショナルデータベースに移行する際、ブールフィールドを正しいSQL方言に変換する必要があります。不正確なマッピングは型エラーや予期しないクエリ動作を引き起こします。

試してみる — JSON to SQL

フルツールを開く