どのような場合に、どちらを使用しますか? 違いはありますか?ブール値を保存するために永続化エンジンで通常使用されるのはどれですか?
6 に答える
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)] [無署名] [ゼロフィル]
非常に小さい整数。符号付きの範囲は -128 ~ 127 です。符号なしの範囲は 0 ~ 255 です。
さらにこれを考慮してください。
ブール、ブール
これらの型は、TINYINT(1) の同義語です。ゼロの値は false と見なされます。ゼロ以外の値は true と見なされます。
これらの理論的な議論はすべて素晴らしいものですが、実際には、少なくとも MySQL を使用していて、実際には SQLServer も使用している場合は、ブール値には非バイナリ データを使用することをお勧めします。 'データの出力、クエリなどを行っています。MySQL と SQLServer の間で相互運用性を実現しようとしている (つまり、2 つの間でデータを同期している) 場合は、BIT データ型の処理が 2 つの間で異なるため、特に重要です。SO 実際には、数値データ型に固執すれば、手間が大幅に軽減されます。MySQL では、TINYINT(1) として格納される BOOL または BOOLEAN を使用することをお勧めします。MySQL Workbench と MySQL Administrator が BIT データ型を表示する方法も良くありません (バイナリ データの小さな記号です)。
BIT は 0 と 1 (およびフィールドが NOT NULL として定義されていない場合は NULL) のみを許可する必要があります。TINYINT(1) は、符号なしかどうかに応じて、1 バイトに格納できる任意の値、-128..127 または 0..255 を許可します (1 は、1 桁のみを使用するつもりであることを示しますが、より大きな値を保存することを妨げません)。
5.0.3 より古いバージョンでは、BIT は TINYINT(1) として解釈されるため、違いはありません。
BIT には "this is a boolean" セマンティックがあり、一部のアプリは TINYINT(1) を同じように見なします (MySQL が使用していた方法のため)。そのため、アプリが型をチェックすると、列をチェック ボックスとしてフォーマットする場合があります。それに基づいてフォーマットを決定します。
間違っているかもしれませんが:
Tinyint は 0 ~ 255 の整数です
ビットは 1 または 0 のいずれかです
したがって、私にとってビットはブール値の選択です
私の経験から、BITにはLinux OSタイプ(Ubuntu for ex)で問題があると言っています。Windows でデータベースを開発し、すべてを Linux にデプロイした後、BIT DATA TYPE を持つテーブルから挿入または選択したクエリで問題が発生しました。
ビットは今のところ安全ではありません。tinyint(1) に変更し、完璧に動作しました。つまり、値が 1 または 0 で、tinyint(1) の場合にのみ区別する必要があるということです。それで問題ありません。