MySQL布尔“tinyint(1)”保存的值高达127?

时间:2010-12-09 18:19:21

标签: mysql boolean tinyint

如果商品有库存,我想制作一个真/假字段。

我想将它设置为布尔值(转换为tinyint(1)),1为库存,0为无库存。

我正在从供应商那里获取资料,所以我心想,“如果他们通过了多少人,那该怎么办?”

所以我想知道我是否插入了一个高于1的数字。我以为它默认为1。

令我惊讶的是,它允许我保留任何数字,最多127个,任何超过默认值为127。

任何人都可以解释原因吗?

4 个答案:

答案 0 :(得分:57)

签名的TINYINT数据类型可以存储-128到127之间的整数值。

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

答案 1 :(得分:7)

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

答案 2 :(得分:6)

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

答案 3 :(得分:0)

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 ,则无效。