回答:
TINYINTは8ビットの整数値で、BITフィールドは1ビットのBIT(1)と64ビットのBIT(64)の間で格納できます。ブール値の場合、BIT(1)はかなり一般的です。
数値型の概要から ;
ビット[(M)]
ビットフィールド型。Mは、1〜64の値あたりのビット数を示します。Mを省略した場合のデフォルトは1です。
このデータ型はMySQL 5.0.3でMyISAMに追加され、5.0.5でMEMORY、InnoDB、BDB、およびNDBCLUSTERに拡張されました。5.0.3より前は、BITはTINYINT(1)の同義語です。
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
非常に小さな整数。符号付き範囲は-128〜127です。符号なし範囲は0〜255です。
さらにこれを考慮してください。
BOOL、BOOLEAN
これらのタイプは、TINYINT(1)の同義語です。ゼロの値はfalseと見なされます。ゼロ以外の値はtrueと見なされます。
boolean
が本当にほんの少しでもバイトを取るだろうと言っているので、BIT(1)はv5.0.3以降の方が良いですか?
BOOL
/ BOOLEAN
の別名ですTINYINT(1)
代わりにBIT
。確かに、それらはすべて1バイト全体を占有することになりますが、意味的にBIT
ははるかに適切です。
これらすべての理論的な議論は素晴らしいですが、実際には、少なくともMySQLを使用していて、実際にSQLServerも使用している場合は、ブール値には非バイナリデータを使用するのが最善です。 'データの出力、クエリなどを実行しています。MySQLとSQLServerの間で相互運用性を実現しようとしている場合(つまり、2つの間でデータを同期する場合)は、BITデータ型の処理が2つで異なるため、特に重要です。そのため、実際には、数値データ型を使用する場合、手間が大幅に軽減されます。MySQLがTINYINT(1)として格納されるBOOLまたはBOOLEANを使用することをお勧めします。MySQL WorkbenchとMySQL AdministratorがBITデータ型を表示する方法でさえ、良くありません(バイナリデータの小さな記号です)。
BITは0と1(およびフィールドがNOT NULLとして定義されていない場合はNULL)のみを許可する必要があります。TINYINT(1)は、符号なしであるかどうかに応じて、-128..127または0..255で1バイトに格納できる任意の値を許可します(1は、1桁のみを使用することを意図していますが、より大きな値を保存することを妨げないでください)。
5.0.3より古いバージョンの場合、BITはTINYINT(1)として解釈されるため、違いはありません。
BITには「これはブール値」のセマンティクスがあり、一部のアプリはTINYINT(1)を同じように見なすため(MySQLがそれを処理するために使用した方法により)、アプリはタイプをチェックする場合、列をチェックボックスとしてフォーマットできますそしてそれに基づいてフォーマットを決定します。
間違っているかもしれませんが:
Tinyintは0〜255の整数です
ビットは1または0です
したがって、私にとってはブール値の選択が少しです
私の経験から、BITにはLinux OSタイプ(Ubuntu for ex)で問題があると言っています。私はdbをWindowsで開発し、すべてをLinuxに展開した後、BIT DATA TYPEを持つテーブルから挿入または選択したクエリで問題が発生しました。
今のところビットは安全ではありません。私はtinyint(1)に変更し、完全に動作しました。つまり、1または0であり、tinyint(1)であれば問題ない場合にのみ、区別するための値が必要です。