MySQL 布尔值“tinyint(1)”保存的值最大为 127?

发布于 2024-10-06 13:15:37 字数 257 浏览 4 评论 0原文

我想为商品是否有库存创建一个真/假字段。

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

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

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

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

谁能解释为什么吗?

I wanted to make a true/false field for if an item is in stock.

I wanted to set it to Boolean ( which gets converted to tinyint(1) ), 1 for in stock, 0 for not in stock.

I am getting feeds from vendors, so I thought to myself, "What if they pass how many are instock?"

So I wondered if I inserted a number higher than 1 what would happen. I assumed it would default to 1.

To my surprise it will allow me to hold any number up to 127, anything over defaults to 127.

Can anyone explain why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

云仙小弟 2024-10-13 13:15:37

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

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

The signed TINYINT data type can store integer values between -128 and 127.

However, TINYINT(1) does not change the minimum or maximum value it can store. It just says to display only one digit when values of that type are printed as output.

逐鹿 2024-10-13 13:15:37

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

The tinyint data type utilizes 1 byte of storage. 256 possible integer values can be stored using 1 byte (-128 through 127). if you define as tinyint unsigned then negative values are discarded so is possible to store (0 through 255).

毁虫ゝ 2024-10-13 13:15:37

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

See here for how MySQL handles this. If you use MySQL > 5.0.5 you can use BIT as data type (in older versions BIT will be interpreted as TINYINT(1). However, the (1)-part is just the display width, not the internal length.

情话墙 2024-10-13 13:15:37
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,那么它就无效。

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 will show the 0's in the start if zerofill is used while creating the table. If you didn't use the zerofill then it is not effective.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文