概要
MySQL(Ver8.0を想定)のBooleanとtinyintとtinyint(1)について整理します。
まず大前提として、MySQLのテーブルではBooleanはtinyintとして扱われています。
参考:MySQL :: MySQL 8.0 リファレンスマニュアル :: 11.9 その他のデータベースエンジンのデータ型の使用
じゃあtinyintは0, 1を表すのかというと、そうでもないのでSQLを書いて確認していきます。
Create table test ( boolCol boolean, tinyIntCol tinyint, tinyIntOneCol tinyint(1) ); describe test;
上記のSQLを実行するとbooleanはtinyint(1)としてカラムが作成されました。
これはbooleanは実質はtinyint(1)であるためです。
参考:MySQL :: MySQL 8.0 リファレンスマニュアル :: 11.1.1 数値データ型の構文
では実際に値をInsertしてみます。
tinyint(1)は0, 1 しか格納されないイメージを持つ方もいると思いますが、どうでしょうか。
insert into test values (127, 127, 127); select * from test;
MySQLのtinyintは、-128 ~ 127
まで格納できるため、このInsertは通ります。
なので、MySQLのbooleanは、true, falseや0, 1のみを表現するものではないことを留意しておいた方が良さそうです。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 11.1.2 整数型 (真数値) - INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT