3

我有一张表,我想保持它的大小,其中一列可以被视为一个 5 字节的无符号整数。这是我不需要搜索的列。

MySQL 提供整数数据类型

  • TINYINT, 对于 1 字节整数
  • SMALLINT, 对于 2 字节整数
  • MEDIUMINT, 对于 3 字节整数
  • INT, 对于 4 字节整数
  • BIGINT, 对于 8 字节整数。

但它也提供, 用于 1 ≤ M ≤ 64。它(有效地)存储一个从 0 到 2 M-1BIT(M)的无符号整数。是否有理由避免使用列来存储 5 字节整数?(正如我所说,我不需要按此列搜索。因此,可以忽略与查询执行速度有关的任何困难。)BIT(40)

4

2 回答 2

3

使用本机整数类型,例如 tinyint。

使用位域不会保存任何字节。也就是说,1 到 8 位的位域占用 1 个字节,因此占用的空间与 tinyint 一样多。

此外,如果您只想将位域用作数字,则使用它们会有点困难。

编辑:实际上,在某些情况下它可能会节省一些字节。但是,我仍然建议使用整数类型。

于 2010-08-13T11:17:38.790 回答
2

MySQL 将 BIT 视为文本数据而不是数字。通常这就是应该避免使用 BIT 的原因——这可能有点令人困惑。例如,我们想在 BIT(8) 列中存储数字 57。数字 57 将存储为 'b'00111001' 即 57 的二进制代表。但它会显示为 9,因为 57 是 '9' 的 ASCII 码。要获得正确的整数值,您必须将列数据转换为数值。您可以使用以下方法测试此行为:

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 回答