【MySQL】BOOLEAN型の扱いを徹底解説!(tinyint/bit)
  • facebookページ
  • twitterページ
  • 2020.01.22

    【MySQL】BOOLEAN型の扱いを徹底解説!(tinyint/bit)

    BOOLEAN型とは?

    BOOLEAN型とは、真理値をとるデータ型のことです。MySQLで真理値は、「true/false」「1/0」で表現されます。

    BOOLEAN型のテーブルを作成

    MySQLの中でBOOLEAN型を指定した場合、どのような扱いになるのかテーブルを作成して確認してみましょう。

    CREATE TABLEで「boolean_table」テーブルを作成し、「bool_data」というBOOLEAN型のカラムを用意します。

    BOOLEAN型は内部的には「tinyint(1)」として扱われ、初期値はNULL

    作成したテーブルをSHOW CREATE TABLEで確認すると次のように表示されるはずです。

    BOOLEAN型のデータは「tinyint(1)」というデータ型であり、デフォルト値は「NULL」になっているのがわかります。

    ポテパンダの一言メモ

    tinyint型とは、1バイトの記憶領域を必要とする-128 から 127の整数を格納するデータ型のことです。

    よって、MySQLでBOOLEAN型とTINYINT(1)は等価になるのがわかります。

    次は、tinyint(1)のテーブルの表示確認です。

    さまざまな値をBOOLEAN型データに格納

    MySQLのBOOLEAN型は、内部的にはtinyint(1)として扱われています。

    そのため、0と1以外の値を入れることも可能です。

    ここでは、さまざまな値を格納してどのように扱われるのかを確認してみましょう。

    これら7つのデータを確認してみると、次のようになります。

    「true」と「false」は「1」と「0」になり、「NULL」「100」「-100」はそのまま格納されているのがわかりますね。

    tinyint(1)の範囲を超える値を格納しようとすると、以下のようにERRORが発生します。

    BOOLEAN型のデータを「true/false」「IS true/IS false」でSELECT

    先ほど格納したデータを「true/false」でSELECTしてみるとどうなるのでしょうか。

    実行結果は次のようになるはずです。

    ちゃんと「0」と「1」のデータが取得できます。

    では、「Is true/Is false」でSELECTしてみるとどうなるのでしょうか。

    「true/false」と同じではないのか、と思うかもしれませんが実行してみると次のようになるはずです。

    「Is false」は「false」と同じ結果ですが、「Is true」は「true」と異なり1以外の値もtrueとして返しているのがわかります。

    「Is true/Is false」の扱い
    • Is true:0以外
    • Is false:0

    BOOLEAN型のNULLデータは「IS UNKNOWN」扱い

    0と0以外の値は「Is true/Is false」で扱われるのがわかりました。

    しかし、「NULLのデータはどのように確認すればよいのだろう」と思う方もいるでしょう。

    NULLデータは「IS UNKNOWN」でSELECT可能です。

    bit(1)で0と1だけのBOOLEAN型テーブルを作成

    データ型をBOOLEANに設定すると、0と1以外の値も格納できてしまいました。

    これだと、0以外の値もtrue扱いになってしまうため、0と1で真理値を扱いたいと思っても管理が難しくなる可能性があります。

    0と1だけで真理値を扱いたい場合のひとつの方法として「bit(1)」のデータ型を使用するものがあります。

    bit(1)は、0(0x00)と1(0x01)の2値を扱うため、それ以外の値は設定できない特徴があるのです。

    試しに、bit(1)をデータ型に設定したテーブルを作成してみましょう。

    上記のようにテーブルが作成できます。

    ここに2を入れようとしても、エラーが出るため入れられないのがわかります。

    「true」「false」は1と0扱いなのでテーブルに格納可能です。

    SELECTで「true」「false」を取り出すこともできます。

    まとめ

    MySQLのBOOLEAN型はtinyint(1)で扱われており、0や1以外の値を入れてしまうとtrueでSELECTするときに想定外の動きをしてしまう可能性があります。

    そのため、完全に0と1だけで真理値を扱いたい場合は、bit(1)を考慮してみるとよいかもしれません。

    ぜひ、MySQLでBOOLEAN型のデータを扱う際は、この記事を参考にしてみてください。

     



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE