您对混乱的解决方案是-
在 Mysql 中, int(6) 并不意味着它们最多可以存储 6 位数字。不超过 999999。
但是 CHAR(6) 这表示一个字符列,最大长度为 6 个字符,例如这些单词:
房屋
如果我尝试在该列中存储单词“special”,MySQL 会将值截断为“specia”,因为原始单词有 7 个字符。
无论如何,整数列都具有允许的预设值范围。括号中的数字仅表示显示宽度。
这可能仍然令人困惑,所以让我进一步解释......</p>
显示宽度是一个从 1 到 255 的数字。如果您希望所有整数值以类似方式“出现”,您可以设置显示宽度:
TINYINT[(M)] [未签名] [ZEROFILL]
M 表示整数类型的最大显示宽度。最大显示宽度为 255。显示宽度与类型可以包含的值的范围无关, 。对于浮点和定点类型,M 是可以存储的总位数。
如果为数字列指定 ZEROFILL,MySQL 会自动将 UNSIGNED 属性添加到该列。
所以你的问题的答案是
create table foo
(
col2 tinyint(2) unsigned zerofill, col4 tinyint(4) unsigned zerofill, col5notzerofill tinyint(5)
)engine=innodb;
insert into foo values (1,2,3),(11,12,14),(123,123,156),(1234,1234,12756);
select * from foo;
OUTPUT :-
+------+------+-----------------+
| col2 | col4 | col5notzerofill |
+------+------+-----------------+
| 01 | 0002 | 3 |
| 11 | 0012 | 14 |
| 123 | 0123 | 127 |
| 255 | 0255 | 127 |
+------+------+-----------------+
*所以明白了,在 Mysql 中显示宽度仅适用于 zerofill。
*如果你使用不使用zerofill,它是无效的。
如果你使用 zerofill 那么 mysql 将检查 display widht ,如果你不指定,那么 mysql 会自动为该列分配 display-width 。*