MySQL中数值类型中smallint、mediumint等区别是什么

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型

数值类型中又可以分为整型、浮点型,或者可以说为严格数值数据类型以及近似数值数据类型

分别为tinyint(m)、smallint(m)、mediumint(m)、int(m)、bigint(m)、float(m,d)、double(m,d)、decimal(m,d)

字节

1 bytes = 8 bit,1个字节最多可以代表的数据长度是2的8次方11111111,在计算机中也就是-128到127

65535

在开发中遇到了一个存进程id的字段,设置了一个smallint unsigned类型,结果出现了所有进程id都为65535

这个值有点特殊,端口的最大值也为65535

计算机是按照二进制储存数据的,一般用unsigned int这种数据类型来储存正整数

在计算机中,每个整数都是用16位2进制数来表示的,所以最大的数就是16个1,也就是11111111 11111111

把二进制数11111111 11111111转化位十进制数就是65535

区别

存储范围不同,分别为

smallint

说到了65535,那就先说一下smallint

2个字节,用于小的整数,带符号的范围是-32768到32767,无符号的范围是0到65535

我遇到的问题就是进程id超过65535,入库的时候都被压为了65535导致

tinyint

1个字节,用于很小的整数,带符号的范围是-128到127,无符号的范围是0到255

mediumint

3个字节,用于中等大小的整数,带符号的范围是-8388608到8388607,无符号的范围是0到16777215

int

4个字节,用于普通大小的整数,带符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295

bigint

8个字节,用于极大整数,带符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615

m是什么意思

比如经常用到的int(11),这里是11是什么意思,只能存11位数吗?当然不是

这个长度11并不代表允许存储的宽度,而是为了告诉MySQL数据库,我们这个字段的存储的数据的宽度为M位数, 当然如果你不是M位数(只要在该类型的存储范围之内)MySQL也能正常存储

其他的数值类型中的m同理,int(1)和int(11)中的1和11并不表示存储长度,只有字段指定zerofill时有用

`tel` int(11) unsigned zerofill NOT NULL,

如果实际值是1234567891,指定了zerofill,查询结果就是01234567891,左边用0来填充

1 条评论

发表评论

*