MySQL 布尔值“tinyint(1)”保存的值最大为 127?
我想为商品是否有库存创建一个真/假字段。
我想将其设置为布尔值(它会转换为 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
有符号
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.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 astinyint unsigned
then negative values are discarded so is possible to store (0 through 255).请参阅此处了解 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 versionsBIT
will be interpreted asTINYINT(1)
. However, the(1)
-part is just the display width, not the internal length.如果在创建表时使用 zerofill,MySQL 将在开头显示 0。如果您没有使用zerofill,那么它就无效。
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.