MySQLではBOOL型とTINYINT型がブール値を表現するために使われますが、これらのデータ型にはいくつかの違いがあります。以下にその違いを具体的なコード例とともに説明します。
TINYINTとBOOLの定義
まず、TINYINTとBOOLの定義について見てみましょう。
CREATE TABLE example_table_tinyint (
id INT PRIMARY KEY,
flag TINYINT
);
CREATE TABLE example_table_bool (
id INT PRIMARY KEY,
flag BOOL
);
デフォルト値
TINYINTとBOOLのデフォルト値の挙動が異なります。TINYINTはデフォルトで0が設定されますが、BOOLはデフォルトでNULLです。
-- TINYINTのデフォルト値は0
INSERT INTO example_table_tinyint (id) VALUES (1);
-- flagの値は0
SELECT * FROM example_table_tinyint WHERE id = 1;
-- BOOLのデフォルト値はNULL
INSERT INTO example_table_bool (id) VALUES (1);
-- flagの値はNULL
SELECT * FROM example_table_bool WHERE id = 1;
TRUEとFALSEの挙動
TINYINTとBOOLでは、TRUEとFALSEの扱いも