Mysql Bit(1)列返回00000000而不是0

时间:2014-09-17 20:18:18

标签: mysql sql

我使用以下命令创建了一个MySQL表:

CREATE TABLE wp_brgpaypal (
        id mediumint(9) AUTO_INCREMENT primary key NOT NULL,
        user_id mediumint NOT NULL,
        month tinyint NOT NULL,
        year tinyint NOT NULL,
        students smallint NOT NULL,
        rating tinyint NOT NULL,
        comission DECIMAL(7,2) NOT NULL,
        paid BIT(1) NOT NULL,   
    )

但是当我在付费列中插入值0时,它会记录00000000.它不应该只记录0吗?

1 个答案:

答案 0 :(得分:2)

不,不一定。我认为大多数MySQL存储引擎会为BIT(1)保留一个完整的存储空间。

存储的位数向上舍入为8的倍数。BIT(1)占用与BIT(8)相同的存储量。 (某些存储引擎可能会合并多个BIT(n)列。)

您如何确定MySQL“记录00000000 ”?

BIT(1)列返回的内容以及显示的内容实际上是客户端问题,而不是数据库存储问题。有些客户会将其显示为b'0'。但这并不是MySQL服务器强制要求的。

注意:如果要从BIT(1)列的内容返回整数值01,则一个“技巧”是使用表达式添加整数零,例如

  SELECT paid+0 AS paid FROM wp_brgpaypal LIMIT 1
         ^^^^^^

但那并没有真正返回BIT(1)数据类型;返回一个整数值(作为表达式的结果。这并不能解决MySQL在BIT(1)列中“记录”的内容。


在相关的说明中,不清楚为什么使用BIT(1)数据类型。您是否打算表示布尔值TRUE / FALSE?逻辑布尔和数据库存储之间存在各种“映射”。

最常见的一种(我经常使用的那种)是

TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'boolean'

我们将零值(0)设为FALSE,将任何其他非空值设为TRUE。 (我们存储1为TRUE,但我们解码列值的方式,除0以外的任何非空值都表示TRUE