我一直以为括号中的数字代表字段长度?但是,我了解并非总是如此。也许这是一个MySQL问题?有人告诉我,如果我将一个字段设置为9个字符长,我可以添加一个超过9个字符的值,但只会保存前9个字符。
例子…
create table "person" ( id INT, age INT(2));
如果是这样,我是否不应该选择TINYINT之类的东西代替INT?
INT(2)将生成一个最小显示宽度为2的INT :
INT(2)
MySQL支持扩展,可以选择在整数类型的基本关键字之后的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位数的INT。应用程序可以使用此可选的显示宽度来显示整数值,该整数值的宽度小于为列指定的宽度,方法是用空格左键填充它们。(也就是说,此宽度存在于结果集返回的元数据中。是否使用它取决于应用程序。) 显示宽度不限制可以存储在列中的值的范围。也不会阻止宽于列显示宽度的值正确显示。例如,指定为SMALLINT(3)的列通常具有-32768到32767的SMALLINT范围,并且使用三位以上的数字完整显示三位数所允许的范围之外的值。
MySQL支持扩展,可以选择在整数类型的基本关键字之后的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位数的INT。应用程序可以使用此可选的显示宽度来显示整数值,该整数值的宽度小于为列指定的宽度,方法是用空格左键填充它们。(也就是说,此宽度存在于结果集返回的元数据中。是否使用它取决于应用程序。)
显示宽度不限制可以存储在列中的值的范围。也不会阻止宽于列显示宽度的值正确显示。例如,指定为SMALLINT(3)的列通常具有-32768到32767的SMALLINT范围,并且使用三位以上的数字完整显示三位数所允许的范围之外的值。
这并 不会 影响可被存储在该字段可能值的范围内; 也不是用于存储它的字节数。除非ZEROFILL被使用,否则似乎仅是建议应用程序如何显示该值(请参阅链接页面)。
ZEROFILL
TINYINT除非冷冻保存在应用程序的生命周期中向前迈出了一大步,否则无符号(0 … 255)也可能会这样做。
TINYINT