3

サイズを抑えたいテーブルがあり、列の1つを5バイトの符号なし整数として扱うことができます。これは私が検索する必要のない列です。

MySQLは整数データ型を提供します

  • TINYINT、1バイト整数の場合
  • SMALLINT、2バイト整数の場合
  • MEDIUMINT、3バイト整数の場合
  • INT、4バイト整数の場合
  • BIGINT、8バイト整数の場合。

ただし、1≤M≤64の場合も提供BIT(M)されます。これにより、0から2 M-1までの符号なし整数が(事実上)格納されます。BIT(40)5バイト整数を格納するために列を使用することを避ける理由はありますか?(前述したように、この列で検索する必要はありません。したがって、クエリの実行速度に関連する問題は無視できます。)

4

2 に答える 2

3

tinyintなどのネイティブ整数型を使用します。

ビットフィールドを使用しても、バイトは保存されません。つまり、1〜8ビットのビットフィールドは1バイトを使用するため、tinyintと同じくらいのスペースを占有します。

また、ビットフィールドを数値としてのみ使用する場合は、ビットフィールドの操作が少し難しくなります。

編集:実際には、場合によっては、一部のバイトを節約できます。ただし、整数型を使用することをお勧めします。

于 2010-08-13T11:17:38.790 に答える
2

MySQLは、BITを数値ではなくテキストデータとして扱います。通常、これがBITでの作業を避ける必要がある理由です-少し混乱するかもしれません。たとえば、番号57をBIT(8)列に格納します。番号57は、 `b'00111001'、つまり57を表す2進数として格納されます。ただし、57は '9'のASCIIコードであるため、9として表示されます。適切な整数値を取得するには、列のデータを数値に変換します。この動作は次の方法でテストできます。

CREATE TABLE testbit(a BIT(8));
INSERT INTO testbit VALUES (b'00111001');
INSERT INTO testbit VALUES (57);
SELECT a FROM testbit;
SELECT a+0 FROM testbit;
于 2010-08-13T11:31:38.640 に答える