MySQL布尔"tinyint(1)"保存的值高达127?

JD *_*cks 37 mysql boolean tinyint

如果某个商品有库存,我想制作一个真/假字段.

我想将它设置为布尔值(转换为tinyint(1)),1为库存,0为无库存.

我正在从供应商那里得到食物,所以我心想,"如果他们通过了多少人,那该怎么办?"

所以我想知道我是否插入了一个高于1的数字.我以为它默认为1.

令我惊讶的是,它允许我保持任何数字达到127,任何超过默认值为127.

有谁能解释为什么?

Bol*_*ock 56

签名TINYINT数据类型可以存储介于-128和127之间的整数值.

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

  • 什么是显示器的意思?当我从db中选择并且tinyint(1)值为100时,它仍然显示100 (3认同)
  • 有没有理由不使用bit(1)?虽然我注意到如果我尝试将其设置为> 1,则默认为0. (2认同)

Nat*_*han 7

tinyint数据类型利用存储的1个字节.可以使用1个字节(-128到127)存储256个可能的整数值.如果你定义为tinyint unsigned那么负值被丢弃,因此可以存储(0到255).


mdm*_*mdm 6

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

  • 能否解释*显示宽度*和*内部长度*之间的区别.我是这个概念的新手,我认为数据库中的内容是什么? (3认同)