根据this文档,SMALLINT的默认大小为2字节。我只是这样做:
CREATE TABLE MYTABLE
(
MYDATA SMALLINT UNSIGNED NOT NULL
) ENGINE=InnoDB;
字符串
当我做describe MYTABLE;
时,我得到:
字段、类型、关键字、默认值、附加值
“MYDATA”,“smallint(5)unsigned',”NO“,”,NULL,“”
为什么要将MYDATA创建为smallint(5)?
但如果我这样做:
CREATE TABLE MYTABLE
(
MYDATA SMALLINT(2) UNSIGNED NOT NULL
) ENGINE=InnoDB;
型
然后创建smallint(2)
。
3条答案
按热度按时间zdwk9cvp1#
括号中的数字不是字节大小。参见https://dev.mysql.com/doc/refman/8.0/en/integer-types.html附近的文档
它是允许存储的位数,最大显示宽度。smallint(5)或smallint(2)都将占用2个字节
snz8szmq2#
一个unsigned smallint的最大值为65535,并且使用2个字节,不管声明时在()中放入了什么数字。你所指的(5)只是指字段的宽度。
o7jaxewo3#
括号中的数字是显示宽度(参见https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html)
无符号
smallint
的默认显示宽度为5,因为可以存储的最小和最大数字为0和65535。这称为smallint(5)
如果有带符号的
smallint
,则默认显示宽度需要为6,因为当存储最小值-32768时需要显示负号。这也是为什么默认的
int
是int(11)
,默认的tinyint
是tinyint(4)
,即使可以存储的最大正值分别是10位数和3位数。