Mysql 括号中的数字到底是什么意思?

Mysql 括号中的数字到底是什么意思?,mysql,sql,ddl,Mysql,Sql,Ddl,我一直认为括号中的数字代表字段长度 然而,我知道情况并非总是如此。也许这是MySQL的问题?有人告诉我,如果我将字段设置为9个字符长,我可以添加一个超过9个字符的值,但只保存前9个字符 例如: CREATE TABLE `person` ( id INT, age INT(2) ); 如果是这种情况,我是否应该为年龄选择类似于TINYINT的内容而不是INT MySQL支持一个扩展,可以选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示

我一直认为括号中的数字代表字段长度

然而,我知道情况并非总是如此。也许这是MySQL的问题?有人告诉我,如果我将字段设置为9个字符长,我可以添加一个超过9个字符的值,但只保存前9个字符

例如:

CREATE TABLE `person` (
    id INT,
    age INT(2)
);
如果是这种情况,我是否应该为年龄选择类似于
TINYINT
的内容而不是
INT

MySQL支持一个扩展,可以选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度。例如,INT(4)指定显示宽度为四位数的INT。此可选显示宽度可由应用程序使用,通过左键填充空格来显示宽度小于为列指定宽度的整数值。(也就是说,此宽度存在于随结果集返回的元数据中。是否使用取决于应用程序。)

显示宽度不限制可存储在列中的值的范围。也不会阻止比列显示宽度宽的值正确显示。例如,指定为SMALLINT(3)的列通常具有-32768到32767的SMALLINT范围,超出三位数字允许范围的值将使用三位以上的数字完整显示

这不会影响可存储在字段中的可能值的范围;也不是用来存储它的字节数。除非使用了
ZEROFILL
,否则这似乎只是对应用程序如何显示值的建议(请参见链接页面)


除非在应用程序的生命周期内向前迈出了一大步,否则无符号的
TINYINT(0…255)也可能会这样做。

对于像vchar这样的字段类型,情况就是这样,但对于数字,它表示它用来表示数字的字节数。两个字节的整数意味着您可以保存一个数字2^16-1(一个字节中有8位,总共16位)。如果是年龄,我想你应该有两个字节是安全的

它接着说:“显示宽度不限制可以存储在列中的值的范围。也不阻止比列显示宽度更宽的值正确显示。”那么,为什么要费心暗示该字段最多可以接受2的值呢?我不认为这与mysql的内部值的长度有关,对吗?它只是一个显示对象。@LuckyTaxis不,对于
varchar
,它是一个值可以使用的实际最大宽度。@Pekka您的链接已损坏。页面仍然存在,但不再包含任何“最小”、“显示”或“宽度”字样。看起来他们已经把它移到页面上了。我本来会建议编辑的,但我不知道如何处理你引用的原文。这对我来说似乎值得保留,我还是不明白。int(11)是一个整数值,它和填充有什么关系?我以为填充是为了字符类型。官方文件称,“int(4)zerofill”将返回5的值作为“0005”。但是int是整数值,怎么会有填充0呢?我以前认为
(2)
也代表字节,但它是不正确的。啊,好的,所以它更适合vchar。所以,如果我想显示SSN,我不应该做
SSN INT(9)
,显然我错了。听佩卡说。o、 o