MySQLのマニュアルから、それは言う:
BOOL、BOOLEAN
これらのタイプは、TINYINT(1)の同義語です。ゼロの値はfalseと見なされます。ゼロ以外の値はtrueと見なされます。
0
をデフォルト値としてBOOLEAN列を作成しました。次に、値を2
に更新します。論理的には、MySQLはブール値であるため、0
または1
のいずれかを受け入れることを期待します。ただし、MySQLはエラーを発行せず、更新を実行できませんでした。
BOOLEANがTINYINT(1)とまったく同じように機能する場合、TINYINT(1)とBOOLEANのどちらを使用しても違いはありますか?
これら2つは実際には同義語であるため、同じ意味で使用できます。それらの間に違いは見られません。
0と1のみを許可する場合でも、bit
タイプを使用できます。
他の人と一緒に作業している場合(または思い出させたい場合)、データタイプBOOLEAN
を使用して、データが1または0の値を取ることのみを目的としていることを示唆できます。
確かに違いがあるように思えます。
私が使用しているテーブルでは、列にインデックスを持つtinyintとして定義された列があります。次のクエリ「explain select * from table where column is true」を呼び出すと、テーブルのすべての行が読み取られることを示します(「possible_keys」列と「ref」列は、「key」列がインデックス)。
クエリを「explain select * from table where column = 1」に変更すると、「可能なキー」と「ref」列に値が割り当てられ、「行」がはるかに低い値に設定され、インデックスが正しく起動します。
また、「true」を「false」に置き換え、1を0に置き換えても、同等の結果が得られました。
さらに一歩進んで、tinyintからintに切り替えましたが、違いはありませんでした。