代码之家  ›  专栏  ›  技术社区  ›  Hammerite

在MySQL中,位列是存储5、6或7字节整数的合适方法吗?

  •  3
  • Hammerite  · 技术社区  · 14 年前

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

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

    但它也提供 BIT(M) ,用于1米64。它(有效地)存储0到2之间的无符号整数 M-1型 . 有没有理由避免使用 BIT(40)

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ernest    14 年前

    MySQL将位视为文本数据,而不是数字。通常这就是应该避免使用BIT的原因—它可能有点混乱。例如,我们希望将数字57存储在位(8)列中。数字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;
    
        2
  •  3
  •   Sjoerd    14 年前

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

    使用位字段不会保存任何字节。也就是说,1到8位的位字段占用1字节,因此将占用与tinyint相同的空间。

    另外,如果您只想将位字段用作数字,那么位字段就更难处理了。