我使用以下命令创建了一个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吗?
答案 0 :(得分:2)
不,不一定。我认为大多数MySQL存储引擎会为BIT(1)
保留一个完整的存储空间。
存储的位数向上舍入为8的倍数。BIT(1)
占用与BIT(8)
相同的存储量。 (某些存储引擎可能会合并多个BIT(n)
列。)
您如何确定MySQL“记录00000000
”?
BIT(1)
列返回的内容以及显示的内容实际上是客户端问题,而不是数据库存储问题。有些客户会将其显示为b'0'
。但这并不是MySQL服务器强制要求的。
注意:如果要从BIT(1)列的内容返回整数值0
或1
,则一个“技巧”是使用表达式添加整数零,例如
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
。