MySQLはbool型を内部的にtinyint(1)へ変換するのか?
MySQLにおけるbool型とtinyint(1)の関係
結論から言うと、はい、MySQLはbool型を内部的にtinyint(1)へ変換します。これは、tinyintが整数データ型の中で最も小さいサイズであるためです。
つまり、MySQLにおいてboolはtinyint(1)の別名(シノニム)であると考えることができます。実際にサンプルテーブルを作成して確認してみましょう。
サンプルテーブルの作成
まず、bool型のカラムを含むテーブルを作成します。
mysql> create table boolToTinyIntDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> isAgeGreaterThan18 bool
-> );
Query OK, 0 rows affected (1.02 sec)
テーブル構造の確認
次に、DESCコマンドでテーブルの構造を確認します。
mysql> desc boolToTinyIntDemo;
実行すると、以下のような出力が得られます。
+--------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(20) | YES | | NULL | |
| isAgeGreaterThan18 | tinyint(1) | YES | | NULL | |
+--------------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
上記の出力結果を見ると、bool型として定義したカラム「isAgeGreaterThan18」が、内部的にtinyint(1)へ自動的に変換されていることがわかります。
データの挿入
続いて、INSERT文を使ってtrueとfalseの値をレコードとして挿入してみます。
mysql> insert into boolToTinyIntDemo(Name,isAgeGreaterThan18) values('Larry',true);
Query OK, 1 row affected (0.18 sec)
mysql> insert into boolToTinyIntDemo(Name,isAgeGreaterThan18) values('Sam',false);
Query OK, 1 row affected (0.14 sec)データの表示
SELECT文でテーブル内のレコードを確認しましょう。
mysql> select *from boolToTinyIntDemo;
実行結果は以下の通りです。
+----+-------+--------------------+
| Id | Name | isAgeGreaterThan18 |
+----+-------+--------------------+
| 1 | Larry | 1 |
| 2 | Sam | 0 |
+----+-------+--------------------+
2 rows in set (0.00 sec)
まとめ
このように、trueを挿入したレコードには「1」、falseを挿入したレコードには「0」が格納されていることが確認できます。MySQLではbool型は実体を持たず、すべてtinyint(1)として扱われるため、true/falseはそれぞれ1/0という数値に対応します。論理値を扱う際は、この仕様を理解しておくと設計やデバッグがスムーズになります。
-
MySQLでユーザーが存在しない場合のみ作成する方法(CREATE USER IF NOT EXISTS)
MySQLでは、「CREATE USER」コマンドに「IF NOT EXISTS」を組み合わせることで、指定したユーザーがまだ存在しない場合にのみ新規ユーザーを作成できます。この構文はMySQL 5.7.6以降のバージョンで利用可能です。基本構文ユーザーが存在しない場合に作成するための基本的な構文は以下の通りです。mysql> CREATE USER IF NOT EXISTS yourUserName@localhost IDENTIFIED BY yourPassword;「yourUserName」には作成したいユーザー名を、「yourPassword」には設定するパスワードを指定
-
MySQLのデータベースファイルはどこに保存される?保存場所の確認方法
MySQLがデータベースファイルを実際にどのディレクトリへ保存しているのかを確認したい場合は、システム変数 @@datadir を参照するのが最も簡単な方法です。この記事では、その確認手順と、取得したパスにデータベースが正しく存在することを検証する方法までを解説します。 @@datadirでデータディレクトリを確認する まず、以下のようにSELECT文で@@datadirの値を取得します。 mysql> SELECT @@datadir; 実行結果の例 +---------------------------------------------+ | @@datadir