JSONブール値のSQL値への変換
JSONブール値(true/false)がデータベースごとに異なるSQL表現にどのようにマッピングされるかを学びます。BOOLEAN型、BIT、TINYINT、方言固有の変換ルールを解説します。
Data Types
詳細な説明
SQLにおけるJSONブール値
JSONにはネイティブのtrueとfalse値がありますが、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型があり、TRUE、FALSE、't'、'f'、'yes'、'no'、1、0を受け入れます。
MySQL出力
INSERT INTO users (id, name, active, verified, admin)
VALUES (1, 'Alice', 1, 0, 1);
MySQLのBOOLEANはTINYINT(1)のエイリアスです。慣例として1がtrue、0がfalseです。
SQL Server出力
INSERT INTO users (id, name, active, verified, admin)
VALUES (1, 'Alice', 1, 0, 1);
SQL ServerはBIT型を使用し、値は1と0です。
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方言に変換する必要があります。不正確なマッピングは型エラーや予期しないクエリ動作を引き起こします。