MySQL中SMALLINT、TINYINT等的默认大小

wa7juj8i  于 5个月前  发布在  Mysql
关注(0)|答案(3)|浏览(80)

根据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)

zdwk9cvp

zdwk9cvp1#

括号中的数字不是字节大小。参见https://dev.mysql.com/doc/refman/8.0/en/integer-types.html附近的文档
它是允许存储的位数,最大显示宽度。smallint(5)或smallint(2)都将占用2个字节

snz8szmq

snz8szmq2#

一个unsigned smallint的最大值为65535,并且使用2个字节,不管声明时在()中放入了什么数字。你所指的(5)只是指字段的宽度。

o7jaxewo

o7jaxewo3#

括号中的数字是显示宽度(参见https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html
无符号smallint的默认显示宽度为5,因为可以存储的最小和最大数字为0和65535。这称为smallint(5)
如果有带符号的smallint,则默认显示宽度需要为6,因为当存储最小值-32768时需要显示负号。
这也是为什么默认的intint(11),默认的tinyinttinyint(4),即使可以存储的最大正值分别是10位数和3位数。

相关问题