MySQLのBOOLEAN型とTINYINT(1)の違いとは?実例でわかりやすく解説
MySQLにおけるBOOLEANとTINYINT(1)の基本的な違い
MySQLにおいて、BOOLEAN(ブール型)とTINYINT(1)の根本的な違いは、実は命名規則(セマンティクス)だけです。内部的には両者はまったく同じデータ型として扱われ、いわば同義語(シノニム)の関係にあります。
つまり、「true / false」という真偽値を扱いたい場面ではBOOLEANを思い浮かべるのが自然ですし、数値として「0 / 1」を扱いたい場面ではTINYINT(1)を選ぶ、という使い分けの考え方になります。
どちらのデータ型を使っても、格納できる値は「0」「1」(あるいはtrue / false)であり、保存結果に違いは生じません。
BOOLEAN型を使用したテーブル作成の例
まずはBOOLEAN型のカラムを持つテーブルを作成してみましょう。
mysql> create table BooleanDemo -> ( -> Light Boolean -> ); Query OK, 0 rows affected (0.52 sec)
次に、trueという値をレコードとして挿入します。
mysql> insert into BooleanDemo values(true); Query OK, 1 row affected (0.12 sec)
登録されたすべてのレコードを表示して確認します。
mysql> select *from BooleanDemo;
実行結果は以下の通りです。trueを挿入したにもかかわらず、表示されるのは数値の「1」である点に注目してください。
+-------+ | Light | +-------+ | 1 | +-------+ 1 row in set (0.00 sec)
TINYINT(1)を使用したテーブル作成の例
続いて、TINYINT(1)型のカラムを持つテーブルを作成します。
mysql> create table tinyint1Demo -> ( -> Light tinyint(1) -> ); Query OK, 0 rows affected (0.58 sec)
今度は数値の「1」を直接挿入してみます。
mysql> insert into tinyint1Demo values(1); Query OK, 1 row affected (0.12 sec)
すべてのレコードを表示します。
mysql> select *from tinyint1Demo;
実行結果は以下の通りです。BOOLEAN型の場合と完全に同じ出力になっていることが確認できます。
+-------+ | Light | +-------+ | 1 | +-------+ 1 row in set (0.00 sec)
使い分けのポイント:セマンティクスで選ぶ
注意点: 両者の唯一の違いは意味論(セマンティクス)上のものです。「true / false」という真偽値について話しているのであれば、可読性の観点からBOOLEAN型を使うべきです。一方、「0 / 1」という数値フラグとして扱うのであれば、TINYINT(1)を選ぶのが適切です。
なお補足として、MySQLではBOOLEANはTINYINT(1)のエイリアスであるため、テーブル定義をSHOW CREATE TABLEなどで確認すると、BOOLEANで作成したカラムもtinyint(1)として表示されます。この仕様を理解しておくと、他の開発者が作成したスキーマを読む際にも混乱しにくくなります。
-
MySQLにおけるintvalue='1'とintvalue=1の違いとは?暗黙の型変換を解説
MySQLで数値型のカラムを検索する際、intvalue=1 と intvalue=1 のどちらを使うべきか迷ったことはありませんか?結論から言うと、数値型カラムとの比較には intvalue=1 を使用するのが正解です。実は、intvalue=1 のように文字列と数値カラムを比較すると、MySQLは内部で cast(1 as int) という暗黙的な型変換(キャスト)を行って処理します。そのため結果自体は同じになりますが、パフォーマンスやインデックスの利用効率に影響を及ぼす可能性があります。この記事では、実際にテーブルを作成して動作を確認しながら、両者の違いを詳しく解説します。検証用テーブル
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (