今天在处理数据库问题的时候,发现对于某个字段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.
其实他们存储的长度都是一样的,只是显示宽度不一样而已。