MySQL数据类型--整数类型

版权声明:本文为博主原创文章,欢迎大家转载。如有错误请多多指教。 https://blog.csdn.net/u011794238/article/details/50897491

OK,现在我们开始研究MySQL的数据类型。MySQL提供了多种数据类型,其中包括整数类型,浮点数类型,定点数类型,日期和时间类型,字符串类型和二进制数据类型。

  • mysql支持的所有的数据类型


不同的数据类型有各自的类型,使用范围也不相同。而且,存储方式也不相同。下图是一份完整的MySQL支持的所有的数据类型。



  • OK,现在我们来先看下整数类型。


整数类型是数据库中最基本的数据类型,标准sql中支持integer和smallint这两类整数类型。MySQL数据库除了支持这两种类型以外,还扩展支持了tinyint,mediumint和bigint。
整理这一系列博客,我们要知道各种整数类型的取值范围,存储的字节数,特点等等。具体如下图:


关于上图解释:

1,int类型和integer类型的字节数和取值范围是一样的,其实在MySQL中int类型和integer类型是一样的。

2,tinyint类型占用的字节最小,只需要一个字节。取值范围也是最小的。

3,bigint类型占用的字节最大,需要8个字节。气质范围是最大的。

4,不同类型的整数类型的字节数不同,根据类型所占的字节数可以算出该类型的取值范围。比如intyint的空间是一个字节,一个字节是8位。那么
tinyint无符号数的最大值就是2的8次-1,也就是255。
tinyint有符号数的最大值就是2的7次-1,也就是127。

5,MySQL支持数据类型的名称后面指定该类型的显示宽度,其基本形式如下:数据类型(显示宽度)

关于这点要注意:数据类型参数是整数数据类型的名称,显示宽度参数是指定宽度的数值。显示宽度是指能够显示的最大数据的长度。比如int(4)就是指定int类型的显示宽度是4。


OK,现在我们来实际的操作下整数相关的数据类型。

  • 整数类型默认的显示宽度:


关于上图我们仔细观察就会发现规律,每个整数类型的默认显示狂赌与其有符号数的最小值的显示宽度相同。因为次数负号是占一个位置的。如果是正数的话一个整数的数据类型的默认显示宽度刚好能显示该数据类型的所有值。

这里来举一个例子,tinyint类型的取值范围是-128~127,那么tinyint默认显示宽度就是4。int类型的最大值10位,所以int的默认显示宽度就是11。

注意:数据的宽度不能大于默认宽度,如果大于默认宽度,那该数据已经超过了该类型的最大值。因为最大值的宽度必须是小于等于默认宽度。如果一个值大于了这个类型的最大值,那么这个值是不可能插入的。但是很遗憾的是我自己过了下,插入是可以插入进去的,但是设值成了该字段的最大值。比如tinyint unsigned最大值255,我们插入300的话数据库中字段转换成255保存了。



  • unsigned,zerofill,auto_increment属性:


OK,现在在这里重点介绍下3个属性:

1,unsigned。既为非负数,用此类型可以增加数据长度。例如如果tinyint最大是127,那tinyint unsigned最大就可以到127 * 2。例如:int类型的整数,有符号值:-128到127,无符号值:0到255。

2,zerofill。该属性参数表示数字不足的显示空间由0来填补。值得注意的是使用zerofill参数时,MySQL会自动加上unsinged属性。那么该整数类型只能表示无符号数,其显示宽度比默认宽度小1。

3,整数类型还有一个auto_increment属性,该属性可是使字段成为自增字段,具有该属性的字段,在插入新的记录时,该字段的值都会在前一条记录的基础上1。所以这个时候就不用人为的设值了呢,一般用来主键的设置上该属性。

比如我们现在见表语句如下:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` tinyint(4) unsigned zerofill DEFAULT NULL,
  `b` smallint(6) unsigned DEFAULT NULL,
  `c` mediumint(9) DEFAULT NULL,
  `d` int(11) DEFAULT NULL,
  `e` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

现在我们往该表中插入的a的值只能是正数,如果是负数的话转换成0000(自动用0补齐显示),往表中插入的b的值只能是正数,如果是负数的话转换成0,往表中插入的主键不用设值,默认从0开始加一插入,当然我们也可以人工设值。

现在我随便插入了几条数据,插入的sql如下,然后显示的结果如下:

INSERT INTO `linkinframe`.`test` (`a`, `b`, `c`, `d`, `e`) VALUES ('1', '1', '1', '1', '1');
INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`, `c`, `d`, `e`) VALUES ('3', '-1', '-1', '1', '1', '1');
INSERT INTO `linkinframe`.`test` (`a`, `b`, `c`, `d`, `e`) VALUES ('333', '333', '333', '333', '333');
 关于该视图的解释:a 使用zerofill,所以非负,b 使用unsigned,所以非负,id主键 auto_increment,所以自增。


  • 总结:

字段选择哪个整数类型,取决于该字段的范围。如果字段的最大值不超过255,那么选择tinyint类型就足够了。取值很大的时候,根据最大值的范围选择int或者bigint类型。比较常用的整数类型是int类型。


展开阅读全文

没有更多推荐了,返回首页