看到这个tinyint(3)结构我很困惑。如果tinyint只能存储 1 个字节,那么在括号中给出大小的目的是什么?MySQL 中这个参数有什么特别之处吗?
那不是字节,而是显示宽度。它用作列值的最大预期典型字符宽度的提示,适用于关心实际使用元数据的应用程序 - 许多人不这样做。
如文档中所述:
MySQL 支持一个扩展,用于在类型的 base 关键字后面的括号中选择性地指定整数数据类型的显示宽度。例如,
INT(4)指定INT显示宽度为四位数的 。应用程序可以使用此可选的显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。(也就是说,这个宽度存在于结果集返回的元数据中。是否使用它取决于应用程序。)显示宽度不限制可以存储在列中的值的范围。它也不会阻止比列显示宽度更宽的值正确显示。例如,指定为的列
SMALLINT(3)的通常SMALLINT范围为 -32768 到 32767,超出三位数字允许范围的值使用三位以上数字完整显示。
unsigned tinyint 的默认值是 (3),因为这是可以存储在 unsigned tinyint 中的最宽数字(在显示的字符位置)的“255”的大小。
显示宽度也不会改变数据类型的存储要求;因此,例如,一个 INT(1) 仍然占用 4 个字节的存储空间。