我使用以下命令创建了一个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吗?
发布于 2014-09-17 20:57:06
不,不一定。我认为大多数MySQL存储引擎都会为BIT(1)保留一个完整字节的存储空间。
存储的位数舍入为8倍。BIT(1)占用的存储量与BIT(8)相同。(一些存储引擎可以组合多个BIT(n)列。)
你是如何确定MySQL“记录”的
BIT(1)列的返回内容和显示方式实际上是客户端问题,而不是数据库存储问题。一些客户端会将其显示为b'0'。但这不是MySQL服务器强制要求的。
注意:如果要从位(1)列的内容返回整数值0或1,一个“技巧”是使用表达式添加整数零。
SELECT paid+0 AS paid FROM wp_brgpaypal LIMIT 1
^^^^^^但这并不是真正返回一点点(1)数据类型;而是返回一个整数值(作为表达式的结果)。这并不能解决MySQL在位(1)列中“记录”的内容。
在相关的说明中,还不清楚为什么要使用BIT(1)数据类型。您打算表示布尔值TRUE/FALSE值吗?逻辑布尔和数据库存储之间有各种各样的“映射”。
其中最常见的(我经常使用的)是
TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'boolean'我们将零值(0)取为FALSE,而其他任何非空值则为TRUE。(我们将1存储为TRUE,但在解码列值时,除0以外的任何非空值都意味着TRUE。
https://stackoverflow.com/questions/25899606
复制相似问题