TINYINT(1) vs BOOLEAN: MySQLでブール値を格納するデータ型
MySQLでブール値を格納するデータ型
- TINYINT(1): 1バイトの整数型で、0または1の値を格納できます。
- BOOLEAN: TRUEまたはFALSEの値を格納できます。
どちらのデータ型を使用しても、ブール値を格納することはできますが、それぞれ異なる特性があります。
TINYINT(1) の特性
- 小さいサイズでメモリを節約できる。
- 他の整数型と比較や演算を行うことができる。
- 0以外の値はすべてTRUEとして扱われる。
BOOLEAN の特性
- 読みやすく、理解しやすい。
- TRUEとFALSEの2つの値のみを扱える。
- 他のデータ型との比較や演算を行うには、暗黙的な変換が必要になる。
一般的には、以下の条件に基づいてデータ型を選択することをおすすめします。
- メモリ使用量を節約したい場合は、TINYINT(1) を使用する。
- 読みやすさを重視する場合は、BOOLEAN を使用する。
- 他のデータ型との比較や演算を行う必要がある場合は、TINYINT(1) を使用する。
その他の注意点
- MySQL 8.0以前では、BOOLEAN 型は TINYINT(1) のエイリアスとして扱われていました。
- MySQL 8.0以降では、BOOLEAN 型は独立したデータ型として扱われます。
- 古いバージョンの MySQL と互換性を保つ必要がある場合は、TINYINT(1) を使用することをおすすめします。
-- テーブルの作成
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
is_active TINYINT(1) NOT NULL DEFAULT 0,
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (id)
);
-- データの挿入
INSERT INTO users (is_active, is_admin) VALUES (1, TRUE);
INSERT INTO users (is_active, is_admin) VALUES (0, FALSE);
-- データの取得
SELECT * FROM users;
-- 更新
UPDATE users SET is_active = 1 WHERE id = 1;
UPDATE users SET is_admin = TRUE WHERE id = 2;
-- 削除
DELETE FROM users WHERE id = 1;
このコードは、users
というテーブルを作成し、is_active
と is_admin
という2つの列を定義しています。
is_active
列は TINYINT(1) 型で、ユーザーがアクティブかどうかを示します。is_admin
列は BOOLEAN 型で、ユーザーが管理者かどうかを示します。
コードを実行すると、users
テーブルに2つのレコードが挿入されます。
- 1つ目のレコードは、
is_active
列が1、is_admin
列がTRUEに設定されています。
その後、コードは users
テーブルからデータを取得し、更新し、削除します。
このサンプルコードは、MySQL でブール値を格納する方法を理解するのに役立ちます。
MySQLでブール値を格納する他の方法
BIT 型は、1ビットから64ビットまでのビット列を格納できるデータ型です。
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
is_active BIT NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
この例では、is_active
列を BIT 型として定義しています。
BIT 型は、TINYINT(1) 型よりもさらに少ないメモリを使用できます。
ENUM 型は、列に格納できる値のリストを定義できるデータ型です。
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
is_active ENUM('0', '1') NOT NULL DEFAULT '0',
PRIMARY KEY (id)
);
この例では、is_active
列を ENUM 型として定義し、0
と 1
という2つの値を許可しています。
ENUM 型は、ブール値だけでなく、その他の有限個の値を格納する場合にも使用できます。
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
is_active SET('active', 'inactive') NOT NULL DEFAULT 'inactive',
PRIMARY KEY (id)
);
SET 型は、複数の値を同時に格納する場合に使用できます。
その他の方法
上記以外にも、以下のような方法でブール値を格納することができます。
- VARCHAR(1) 型を使用して、'0' または '1' という文字列を格納する。
- INT 型を使用して、0 または 1 という数値を格納する。
これらの方法は、TINYINT(1) 型や BOOLEAN 型よりも効率が低くなります。
- その他の有限個の値を格納したい場合は、ENUM 型を使用する。
- 複数の値を同時に格納したい場合は、SET 型を使用する。
mysql boolean sqldatatypes