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

MySQLのBOOLとBOOLEANに違いはある?実態はTINYINT(1)の別名だった

MySQLにおけるBOOLBOOLEANは、どちらもTINYINT(1)と完全に同じように動作します。つまり、両者はTINYINT(1)の別名(シノニム=同義語)であり、内部的には真偽値ではなく、0か1の整数値として扱われます。本記事では、具体的なSQLの例を通じて、その仕組みをわかりやすく解説します。

BOOLEAN型の使い方

まずはBOOLEAN型の例です。BOOLEAN型のカラムを持つテーブルを作成するクエリは次のとおりです。

mysql> create table Demo
    -> (
    -> isValidUser boolean
    -> );
Query OK, 0 rows affected (1.08 sec)

続いて、INSERT文を使ってレコードを挿入します。ここではリテラルの「true」と数値の「0」を使用してみましょう。

mysql> insert into Demo values(true);
Query OK, 1 row affected (0.19 sec)

mysql> insert into Demo values(0);
Query OK, 1 row affected (0.17 sec)

SELECT文でテーブル内のすべての値を確認します。

mysql> select *from Demo;

出力結果

+-------------+
| isValidUser |
+-------------+
|           1 |
|           0 |
+-------------+
2 rows in set (0.00 sec)

BOOL型の使い方

次にBOOL型の例を見ていきます。テーブルを作成するクエリは以下のとおりです。

mysql> create table Demo1
    -> (
    -> isValidUser bool
    -> );
Query OK, 0 rows affected (0.54 sec)

INSERT文でレコードを挿入します。今回は数値の「1」と、リテラルの「false」を使ってみます。

mysql> insert into Demo1 values(1);
Query OK, 1 row affected (0.14 sec)

mysql> insert into Demo1 values(false);
Query OK, 1 row affected (0.16 sec)

SELECT文ですべての値を表示しましょう。

mysql> select *from Demo1;

出力結果

+-------------+
| isValidUser |
+-------------+
|           1 |
|           0 |
+-------------+
2 rows in set (0.00 sec)

まとめ:BOOLとBOOLEANに機能的な違いはない

上記の出力結果に注目してください。「false」を指定して挿入した値が「0」に変換されて格納されていることがわかります。これは、BOOLもBOOLEANも、内部でTINYINT(1)へ暗黙的に変換されることを意味しています。

なお、MySQLではTRUE/FALSEというリテラル自体が、それぞれ1/0へのエイリアスとして定義されています。さらに、DESCコマンドやSHOW CREATE TABLEでテーブル定義を確認すれば、カラムの型が「tinyint(1)」と表示されるため、この挙動を実際に確かめることができます。したがって、BOOLとBOOLEANのどちらを選んでも動作に違いはなく、可読性の観点から好みの方を使えば問題ありません。

  1. MySQLのTINYINT(1)とブール型(BOOLEAN)の違いとは?

    結論から言うと、TINYINT(1)とブール型(BOOLEAN)の間に違いはありません。MySQLでは、BOOLまたはBOOLEANというキーワードは内部的にTINYINT(1)へと変換されます。つまり、BOOLやBOOLEANはTINYINT(1)の別名(シノニム)として扱われるのです。それでは、実際にテーブルを作成して確認してみましょう。BOOLEAN型でテーブルを作成するmysql> create table DemoTable ( isMarried Boolean ); Query OK, 0 rows affected (1.77 sec)次に、作成したテーブルの構造

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (