【问题标题】:MySQL Boolean "tinyint(1)" holds values up to 127?MySQL Boolean "tinyint(1)" 保存值高达 127?
【发布时间】:2011-05-23 01:09:00
【问题描述】:

我想为某件商品是否有库存设置一个真/假字段。

我想将其设置为布尔值(转换为 tinyint(1)),1 表示有货,0 表示没有库存。

我从供应商那里获取信息,所以我想,“如果他们通过了有多少库存怎么办?”

所以我想知道如果我插入一个大于 1 的数字会发生什么。我以为它会默认为 1。

令我惊讶的是,它允许我保存不超过 127 的任何数字,超过默​​认值 127 的任何数字。

谁能解释一下原因?

【问题讨论】:

    标签: mysql boolean tinyint


    【解决方案1】:
    CREATE TABLE foo_test(
    col_1 TINYINT
    , col_2 TINYINT(2) 
    , col_3 TINYINT(3) 
    , col_4 TINYINT(2) ZEROFILL
    , col_5 TINYINT(3) ZEROFILL
    );
    
    INSERT INTO foo_test( col_1,col_2,col_3,col_4,col_5 )
    SELECT 1, 1,1,1,1
    UNION ALL
    SELECT 10, 10,10,10,10
    UNION ALL
    SELECT 100, 100,100,100,100;
    
    SELECT * FROM foo_test; 
    
    **OUTPUT:-**   
     col_1   col_2   col_3   col_4   col_5  
    ------  ------  ------  ------  --------
         1       1       1      01       001
        10      10      10      10       010
       100     100     100     100       100
    

    如果在创建表时使用 zerofill,MySQL 将在开头显示 0。如果你没有使用 zerofill 那么它是无效的。

    【讨论】:

      【解决方案2】:

      请参阅here 了解 MySQL 如何处理此问题。如果您使用 MySQL > 5.0.5,您可以使用 BIT 作为数据类型(在旧版本中,BIT 将被解释为 TINYINT(1)。但是,(1)-part 只是显示宽度,而不是内部长度.

      【讨论】:

      • 您能否解释一下显示宽度内部长度之间的区别。我是这个概念的新手,我认为数据库中的内容是选择的内容?
      • 也要求对此作出解释。
      【解决方案3】:

      tinyint 数据类型使用 1 个字节的存储空间。使用 1 个字节(-128 到 127)可以存储 256 个可能的整数值。如果您定义为tinyint unsigned,则负值将被丢弃,因此可以存储(0 到 255)。

      【讨论】:

        【解决方案4】:

        有符号的TINYINT 数据类型可以存储介于-128 和127 之间的整数值。

        但是,TINYINT(1) 不会更改它可以存储的最小值或最大值。它只是说显示当该类型的值作为输出打印时只显示一个数字。

        【讨论】:

        • 有什么理由不使用 bit(1) 代替吗?虽然我注意到如果我尝试将其设置为 >1,它默认为 0。
        • @JoshN:不太确定,但我发现this question 可能会有所帮助。
        • @John:不,值仍然按原样显示,但如果应用程序需要,MySQL 也会发送显示长度。在 PHP 中,您使用mysql_field_len() 获取显示长度,然后调用substr() 或任何您需要适当显示值的方法,以防值溢出显示长度。
        • 显示是什么意思?当我从 db 中选择时,并且 tinyint(1) 值为 100,它仍然显示 100,例如
        • @Dejel 就像提到的 BoltClock 一样,括号中的 length 值的作用类似于元数据。它允许应用程序(如果需要)知道列字段的预期长度。
        猜你喜欢
        • 2011-04-14
        • 2020-02-03
        • 2011-11-25
        • 2015-07-11
        • 2012-10-18
        • 2013-08-09
        • 2012-06-25
        • 2014-05-16
        • 2021-07-20
        相关资源
        最近更新 更多