mysql 中的 int(n)

如图:

mysql 中的 int(n)

mysql 中的这个长度设置,即 int(n) 是什么意思,以及“无符号”和“填充零”又代表什么意思?

  • 无符号:

首先int(n),Integer(n) 长度为32位二进制整数(4字节),勾选上“无符号”时表示禁止负数,取值从0开始。此时可以表示的范围是 0 ---- 2e(32)-1 ,你可以存储任何在这个范围内的数字。(即符号位也用于具体数字的存储)

  • 填充零:

勾选上“零填充”之后就会有很大的不同,若选择 int(4),存储 18 (十进制),则数据库中显示的是 0018(十进制),如果填写 12345(十进制),此时超过了选择的指定宽度 4,但未超过 int 可存储范围(无符号时:0 ---- 2e(32)-1),会按原样存储。

  • int(n):

n 的定义与存储空间没有任何关系,底层存储还是4个字节。

此处的 int(n) 中的 n 仅仅指的是显示宽度,显示宽度只用于显示,并不能限制取值范围和占用空间,如:int(3) 会占用 4 个字节的存储空间,并且允许的最大值也不会是 999,而是 int 整型所允许的最大值(无符号时:2e(32)-1)。

该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

即 mysql 需要用多少个十进制位来显示该列数值。int 的最大有效显示宽度为11(勾选“无符号”时32位二进制最大可转化的十进制位数)。此时如果勾选过“零填充”,数字显示会自动填充零。

声明整型数据列时,我们可以为它指定个显示宽度,如 int(5),指定显示宽度为5个十进制位,如果没有给它指定显示宽度,MySQL会为它指定一个默认值:11,即 int 的最大十进制长度。