如果商品有库存,我想制作一个真/假字段。
我想将它设置为布尔值(转换为tinyint(1)
),1为库存,0为无库存。
我正在从供应商那里获取资料,所以我心想,“如果他们通过了多少人,那该怎么办?”
所以我想知道我是否插入了一个高于1的数字。我以为它默认为1。
令我惊讶的是,它允许我保留任何数字,最多127个,任何超过默认值为127。
任何人都可以解释原因吗?
答案 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 ,则无效。