以前我一直以为这里是在限制int显示的宽度,后来仔细研究和通过上网查询发现,事实并不是那样的。
确切的来说,这里的“宽度”只是一个“预期值”,它所代表的仅仅是你在设计数据表结构时,想让该列日后显示的值宽度为多少,但是具体存入值的宽度多少不会受任何影响。
当然,它的作用不仅如此,在存入数据的时候,还是有一定区别的,这一点可以通过设置字段的zerofill可以看出。比如这里我们创建一个数据表,结构如下:
create
table
test
(
num
int(5)
zerofill
)
上面代码创建一个名为test的表,结构很简单,表中只有一个名为num的字段,类型为int,宽度为5,为了看出宽度方便,我们又添加一个zerofill属性(该属性会让存入数值在不足宽度情况下,左侧补0)
然后我们开始插入数据:
mysql>
insert
into
test
values(1),(11),(123),(12345),(123456),(1234567)
Query
OK,
6
rows
affected
(0.00
sec)
Records:
6
Duplicates:
0
Warnings:
0
打印结果:
mysql>
select
*
from
test
+---------+
|
num
|
+---------+
|
00001
|
|
00011
|
|
00123
|
|
12345
|
|
123456
|
|
1234567
|
+---------+
6
rows
in
set
(0.00
sec)
由以上结果,不难看出,如果字符少于设置(期望值)宽度,在设置了zerofill属性的情况下,左侧会统统补0;但是如果超出则不受任何影响。也就是说这里的int(m)中m只是一个预期值,和真实数据宽度并没多大关系。
mysql int(M) M是啥意思,最大是多少,int(M) 在 integer 数据类型中,M 表示最大显示宽度。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。int(M) 在 integer 数据类型中,M 表示最大显示宽度,该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。
显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系, int(3)、int(4)、
int(8) 在磁盘上都是占用 4 btyes 的存储空间。
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,
值4检索为00004。
bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)