您的位置:首页 > 数据库 > MySQL

mysql之zerofill

2013-05-13 22:29 253 查看
相信很多用了mysql的人都很迷茫

1.对于整形的字段用了unsigned有什么区别?

2.tinyint(1) 和 tinyint(7) 究竟有什么区别?

下面来简单分析一下:

1、对于每种整形来说,都分无符号(unsigned)和有符号(signed)两种类型,如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为–32768
~ 32767(16位2进制的最高位作为符号位‘1’为负‘0’为正),而unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)。

由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。

下面提供一下MYSQL中各种类型的整形的存储范围



2、说到tinyint(1)和 tinyint(7)的区别,就不能不提mysql的整形的一个特性,zerofill,即是否在位数不足的时候,左补0。

明白这个定义之后,其实就是非常清楚了,1也好,7也好,只是和zerofill结合起来使用,用来标识存储的值在不满足多少位的情况下左补0

看例子


先建一张测试表test1

CREATE TABLE IF NOT EXISTS `test1` (
`t1` int(5) unsigned NOT NULL,
`t2` int(11) unsigned zerofill NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE = utf8_unicode_ci;

INSERT INTO `test1` (`t1`, `t2`) VALUES
(111, 111111),
(111111,1111);
看一下最终的数据显示:



真相都在图中了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: