web-dev-qa-db-ja.com

MySQLのBITとTINYINTの違いは何ですか?

どの場合にどれを使用しますか?大きな違いはありますか?パーシステンスエンジンがブール値を格納するために通常使用するのはどれですか?

96
carrier

TINYINTは8ビット整数値であり、BITフィールドには1ビットのBIT(1)と64ビットのBIT(64)を格納できます。ブール値の場合、BIT(1)はかなり一般的です。

112
Robert Gamble

から 数値型の概要 ;

BIT [(M)]

ビットフィールド型。 Mは、値ごとのビット数を1〜64で示します。Mを省略した場合のデフォルトは1です。

このデータ型は、MyISAMのMySQL 5.0.3で追加され、5.0.5でMEMORY、InnoDB、BDB、およびNDBCLUSTERに拡張されました。 5.0.3より前では、BITはTINYINT(1)の同義語です。

TINYINT [(M)] [UNSIGNED] [ZEROFILL]

非常に小さな整数。符号付き範囲は-128〜127です。符号なし範囲は0〜255です。

さらにこれを考慮してください。

ブール、ブール

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

54
Nelson Miranda

これらの理論的な議論はすべて素晴らしいですが、実際には、少なくともMySQLを使用し、実際にSQLServerにも使用している場合は、ブール値の非バイナリデータを使用するのが最善です。 'データの出力、クエリなど。 MySQLとSQLServerの間で相互運用性を実現しようとする場合(つまり、2つの間でデータを同期する場合)、BITデータ型の処理は2つで異なるため、特に重要です。 SO実際には、数値データ型に固執すれば、面倒はずっと少なくなります。MySQLでTINYINT(1)として格納されるBOOLまたはBOOLEANに固執することをお勧めします。 MySQL WorkbenchとMySQL Administratorは、BITデータ型がニースではないことを表示します(バイナリデータの小さな記号です)。

34
Sheldmandu

BITは、0と1(およびフィールドがNOT NULLとして定義されていない場合はNULL)のみを許可する必要があります。 TINYINT(1)は、符号なしかどうかに応じて、-128..127または0..255の1バイトに格納できる値を許可します(1は、1桁のみを使用するつもりであることを示しますが、大きな値を保存することを妨げないでください)。

5.0.3より古いバージョンの場合、BITはTINYINT(1)として解釈されるため、noの違いがあります。

BITには「これはブール値」というセマンティクスがあり、一部のアプリはTINYINT(1)を同じ方法(MySQLが処理するため)を考慮するため、アプリはタイプをチェックすると列をチェックボックスとしてフォーマットする場合がありますそしてそれに基づいてフォーマットを決定します。

11
Michael Madsen

間違っているかもしれませんが:

Tinyintは0〜255の整数です

ビットは1または0です

したがって、私にとってビットはブール値の選択です

3
Allen Hardy

私の経験から、BITにはLinux OSの種類(Ubuntu for ex)で問題があることを伝えています。 Windowsでdbを開発し、すべてをLinuxにデプロイした後、BIT DATA TYPEを持つテーブルから挿入または選択したクエリで問題が発生しました。

ビットは今のところ安全ではありません。 tinyint(1)に変更し、完全に機能しました。つまり、値が1または0であり、tinyint(1)である場合に区別するために値が必要であることを意味します。

0
AndreiTiberiu