【MySQL】整数类型取值范围和使用

数据库 ngxz 2个月前 (05-05) 80次浏览 已收录 0个评论 扫描二维码

MySQL中有5个整数类型,他们的取值范围和占用储存空间很容易通过搜索得出结果,如图:

 

比如tinyint占用1字节的空间,其有符号的取值范围是-128到128,无符号的范围是0到255。

1.取值范围怎么来的

最开始的时候我是看不懂这个表格的,为什么1个字节他的取值范围就是-128到128呢?经过查阅资料,因为计算机储存中的数据是由二进制的0和1组成的,每个0或者1都代表一个位(bit),1哥字节(B)等于8位。无符号时:最小值8位全是0,最大值8位全是1,转为对应十进制,就是0到255。有符号时:二进制用最左边的一位来表示正负,0为正,1为负,所以01111111就是127,而用补码的方式表示负数,即11111111就是-127,其中的-0被认为规定为-128,所以他的范围是图中的样子。其余的类型,对应的字节数乘8位,也可以计算出对应范围。

2.根据需求选择合适的类型

有时候,开发同学设计的表中,数值类型全部使用int,这会造成资源的浪费。如用户的性别,年龄,状态等字段,性别只有男女之分,年龄一般在0到100之间,状态的标识也不会超过几十上百,所以使用tinyint最为合适。

如果储存的数据中没有负数,则使用UNSIGNED无符号类型。

有时候需要储存IPv4地址,可以使用INT UNSIGNED类型,储存时使用MySQL函数INET_ATON()把IP转为数字,使用时用INET_ATON()把数字转为IP。

3.关于tinyint(2)

括号中的2表示的不是tinyint的最大长度,而是显示的最大长度。tinyint的最大值还是127没变(有符号),虽然已经超过2位了。这个2的作用需要在建表时指定ZEROFILL参数后,查询时才能体现出来。如果表中数据是1,则查出来的结果会自动用0补成两位,即01。这只是影响的查询结果,表中的数据还是1没变。所以平时指定括号中的数值并没有意义。


如未注明 , 均为原创 转载请注明原文链接:【MySQL】整数类型取值范围和使用 http://blog.yuanrb.com/sql/373/
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到