web-dev-qa-db-ja.com

TINYINT(1)よりもBOOLEANを使用する利点は何ですか?

MySQLのマニュアルから、それは言う:

BOOL、BOOLEAN

これらのタイプは、TINYINT(1)の同義語です。ゼロの値はfalseと見なされます。ゼロ以外の値はtrueと見なされます。

0をデフォルト値としてBOOLEAN列を作成しました。次に、値を2に更新します。論理的には、MySQLはブール値であるため、0または1のいずれかを受け入れることを期待します。ただし、MySQLはエラーを発行せず、更新を実行できませんでした。

BOOLEANがTINYINT(1)とまったく同じように機能する場合、TINYINT(1)とBOOLEANのどちらを使用しても違いはありますか?

16

これら2つは実際には同義語であるため、同じ意味で使用できます。それらの間に違いは見られません。

0と1のみを許可する場合でも、bitタイプを使用できます。

12
dezso

他の人と一緒に作業している場合(または思い出させたい場合)、データタイプBOOLEANを使用して、データが1または0の値を取ることのみを目的としていることを示唆できます。

2
Cato Minor

確かに違いがあるように思えます。

私が使用しているテーブルでは、列にインデックスを持つ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に切り替えましたが、違いはありませんでした。

0
user77843