MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで真偽値を格納するならBOOLEANかTINYINTか?違いと使い方を解説

MySQLでは、BOOLEAN型とBOOL型はどちらもTINYINT(1)の別名(シノニム)として扱われます。つまり、BOOLEANやBOOLでカラムを定義しても、MySQLは内部的に自動的にTINYINT(1)へ変換します。格納できるのは実質的に0(偽)・1(真)およびNULLであり、3つの型に機能的な違いはありません。

BOOLEAN型でテーブルを作成してみる

まず、BOOLEAN型を使ったテーブルを作成します。テーブル作成のクエリは以下の通りです。

mysql> create table BooleanDemo
-> (
-> IsOn BOOLEAN
-> );
Query OK, 0 rows affected (0.58 sec)

続いて、作成したテーブルの内部構造を確認します。次のクエリを実行してください。

mysql> show create table BooleanDemo;

出力結果

+-------------+----------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+----------------------------------------------------------------------------------------------------------------------------------+
| BooleanDemo | CREATE TABLE `booleandemo` ( `IsOn` tinyint(1) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------------+----------------------------------------------------------------------------------------------------------------------------------+

出力結果を見ると、BOOLEANで定義したカラムがtinyint(1)に変換されていることが確認できます。これはBOOL型の場合も同様です。次に、BOOL型でテーブルを作成してみましょう。

BOOL型でテーブルを作成してみる

BOOL型を使ったテーブル作成のクエリは以下の通りです。

mysql> create table BOOLDemo
-> (
-> validUser BOOL
-> );
Query OK, 0 rows affected (0.61 sec)

こちらも同様に、テーブルの内部構造を確認します。

mysql> show create table BOOLDemo;

出力結果

+----------+------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+------------------------------------------------------------------------------------------------------------------------------------+
| BOOLDemo | CREATE TABLE `booldemo` (`validUser` tinyint(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------+------------------------------------------------------------------------------------------------------------------------------------+

BOOL型で定義した「validUser」カラムも、tinyint(1)として作成されていることがわかります。

まとめ:どちらを選ぶべきか?

BOOLEAN・BOOL・TINYINT(1)はすべて内部的には完全に同じデータ型です。選択の基準となるのは可読性です。真偽値を扱う意図がコード上で明確になるため、BOOLEANを使用するのが一般的に推奨されます。ただし注意点として、MySQLのBOOLEANは他のRDBMSのような厳密な論理型ではなく、0と1以外の任意の整数値も格納できてしまいます。アプリケーション側で0/1のみを扱うよう制御することで、意図しないデータの混入を防ぎましょう。

  1. MySQLでインデックス付きのテーブルを作成する方法を徹底解説

    MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp

  2. Javaを使用してMySQLテーブルの値を表示する方法

    MySQLデータベースのテーブル値をJavaで表示するには、ResultSetの概念を利用します。データベースへの接続には、MySQL JDBCドライバーを使用します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo87    -> (    -> name varchar(20),    -> age int    -> )