Mysql中int(1) int(5)中括号数字作用

3,619 阅读2分钟

今天在处理数据库问题的时候,发现对于某个字段sort 在初始化时,是int(1),但是仍然存进去了超过9的数字,存入99依然可以,那我要这1又有何用呢?他到底能存多少长度?

在查阅了网上的资料后发现:

int(1),这个长度1并不代表允许存储的宽度

首先搬运一个整数类型存储和范围:

(PS:MD里面的表格真难用啊,还不如去前端编辑器里先处理好再复制出来)

类型
字节
最小值
最大值
(带符号的/无符号的)
(带符号的/无符号的)
TINYINT
1
-128
127
0
255
SMALLINT
2
-32768
32767
0
65535
MEDIUMINT
3
-8388608
8388607
0
16777215
INT
4
-2147483648
2147483647
0
4294967295
BIGINT
8
-9223372036854775808
9223372036854775807
0
18446744073709551615

表格一共有四列分别表式:字段类型, 占用字节数, 允许存储的最小值, 允许存储的最大值.


我们拿int类型为例:
int类型, 占用字节数为4byte, 学过计算机原理的同学应该知道, 字节(byte)并非是计算机存储的最小单位, 还有比字节(byte)更小的单位, 也就是位(bit),一个位就代表一个0或1; 8个位组成一个字节; 一般字节用大写B来表示byte, 位用小写b来表示bit.
计算机存储单位的换算:
1B=8b
1KB=1024B
1MB=1024KB
那么根据int类型允许存储的字节数是4个字节, 我们就能换算出int UNSIGNED(无符号)类型的能存储的最小值为0, 最大值为4294967295(即4B=32b, 最大值即为32个1组成);



那么在这里究竟这里int(1) 和int (5) int(10) 有什么区别呢

这里的1和5和10 只是显示宽度,即如果我存储了 一个 9, 则在mysql中,其实int(1)的字段存储的是9,而int (5)存储的是00009,而int(10)存储的是00000000009.

其实他们存储的长度都是一样的,只是显示宽度不一样而已。