首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql位(1)列返回00000000而不是0

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

Stack Overflow用户
提问于 2014-09-17 20:18:18
回答 1查看 964关注 0票数 1

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

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 20:57:06

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

存储的位数舍入为8倍。BIT(1)占用的存储量与BIT(8)相同。(一些存储引擎可以组合多个BIT(n)列。)

你是如何确定MySQL“记录”的

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

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

代码语言:javascript
复制
  SELECT paid+0 AS paid FROM wp_brgpaypal LIMIT 1
         ^^^^^^

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

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

其中最常见的(我经常使用的)是

代码语言:javascript
复制
TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'boolean'

我们将零值(0)取为FALSE,而其他任何非空值则为TRUE。(我们将1存储为TRUE,但在解码列值时,除0以外的任何非空值都意味着TRUE

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25899606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档