我一直以为括号中的数字代表字段长度?但是,据我所知,并非总是如此。也许这是一个mysql问题?有人告诉我,如果我将字段设置为9个字符长,我可以添加一个超过9个字符的值,但只保存前9个字符。
示例......
create table "person" ( id INT, age INT(2));
如果是这种情况,我不应该为年龄选择像TINYINT而不是INT这样的东西吗?
答案 0 :(得分:43)
INT(2)
将使用minimum display width of 2生成INT:
MySQL支持扩展,可以选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位的INT。应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们。 (也就是说,此宽度存在于使用结果集返回的元数据中。是否使用它取决于应用程序。)
显示宽度不会限制可以存储在列中的值的范围。它也不会阻止比列显示宽度更宽的值正确显示。例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超过三位数允许范围之外的值将使用三位数以完整显示。
不会影响可以存储在字段中的可能值的范围;它也不是用于存储它的字节数。除非使用ZEROFILL
,否则似乎只是建议应用程序如何显示值(请参阅链接页面)。
无符号TINYINT
(0 ... 255)可能也会这样做,除非cryopreservation在您的应用程序生命周期中向前迈出一大步。
答案 1 :(得分:-3)
对于像vchar这样的字段类型就是这种情况,但对于数字,它表示它用来表示数字的字节数。两个字节的整数表示您可以保存一个数字2 ^ 16 - 1(一个字节为8位,总共16位)。如果它的年龄,我认为你应该安全两个字节。 ;)