我想为商品库存创建一个真/假字段。
我希望将其设置为布尔值(会被转换为tinyint(1)
),1表示有库存,0表示无库存。
我从供应商那里获取数据源,所以我想:“如果他们传递了多少库存呢?”
所以我想知道,如果我插入一个大于1的数字会发生什么。 我假设它会默认为1。
令我惊讶的是,它允许我保留任何高达127的数字,超过这个数字则默认为127。
有人能解释一下原因吗?
已签名的 TINYINT
数据类型可以存储介于-128和127之间的整数值。
然而,TINYINT(1)
不会改变它可以存储的最小或最大值。它只是表示在将该类型的值打印为输出时,只显示一个数字。
tinyint
数据类型利用1个字节的存储空间。使用1个字节可以存储256个整数值(-128到127)。如果定义为tinyint unsigned
,则负值将被舍弃,因此可以存储0到255。
BIT
作为数据类型(在旧版本中,BIT
将被解释为TINYINT(1)
)。但是,(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
mysql_field_len()
获取显示长度,然后调用substr()
或其他必要的内容来适当地显示值,以防止值溢出显示长度。 - BoltClock