Mysql中整形int(M)和字符类型varchar(M)的区别
2019-03-14 本文已影响29人
IT菜鸟学习
在之前的认知中 tinyint(4)、smallint(6)、mediumint(9)、int(11)、bigint(20)
这几个类型后面的M值是代码数字能存储的最大长度
类型 | 占用字节 | 从 | 到 |
---|---|---|---|
tinyint | 1 | -128 | 127 |
smallint | 2 | -32768 | 32767 |
mediumint | 3 | -8388608 | 8388607 |
int | 4 | -2147483648 | 2147483647 |
bigint | 8 | -9223372036854775808 | 9223372036854775807 |
创建数据库表的例子
CREATE TABLE test(
id1 int(1),
id2 tinyint(1)
);
然后执行插入数据
INSERT INTO test(id1,id2) values(127,127); -- 正常
INSERT INTO test(id1,id2) values(128,127); -- 正常
INSERT INTO test(id1,id2) values(127,128); -- 插入正常(但是在表中的数据是127,127)
image.png
从例子中可以看出来,其实和M值是没有关系的
,例如int真正所占用的空间还是4个字节,tinyint所占用的字节还是1个字节。
tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,M不代表占用空间的容量,而是代表最小显示位数
,只有字段指定zerofill
是有用。
如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。
所以,这些字段用默认长度就可以了,不需要在自己去设置长度,基本没用,而且还增加了表字段类型的多样化。
varchar(M)中的M是字符串的长度
,所以mysql开发中需要区分整数类型和字符串类型的区别。
转自:https://blog.csdn.net/qq_15037231/article/details/79481204
https://blog.csdn.net/jaryle/article/details/52025023