我想为某件商品是否有库存创建一个真/假字段。
我想将其设置为布尔值(转换为tinyint(1)
),1 表示有货,0 表示没有库存。
我从供应商那里得到信息,所以我想,“如果他们通过了有多少库存怎么办?”
所以我想知道如果我插入一个大于 1 的数字会发生什么。我认为它会默认为 1。
令我惊讶的是,它将允许我保存最多 127 的任何数字,超过默认值 127 的任何数字。
谁能解释为什么?
有符号TINYINT
数据类型可以存储 -128 到 127 之间的整数值。
但是,TINYINT(1)
不会更改它可以存储的最小值或最大值。它只是说当该类型的值作为输出打印时只显示一位数字。
该tinyint
数据类型使用 1 个字节的存储空间。使用 1 个字节(-128 到 127)可以存储 256 个可能的整数值。如果定义为,tinyint unsigned
则丢弃负值,因此可以存储(0 到 255)。
请参阅此处了解 MySQL 如何处理此问题。如果您使用 MySQL > 5.0.5,则可以BIT
用作数据类型(在旧版本BIT
中将被解释为TINYINT(1)
. 但是,(1)
-part 只是显示宽度,而不是内部长度。
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那么它是无效的。