数据库中INT类型概述

文章目录

    • 一. 背景
    • 二. INT类型的总结
      • 1. 概述
      • 2. 详述
        • 2.1 bit[M]
        • 2.2 TINYINT([M])[unsigned][zerofill]
        • 2.3 SMALLINT([M])[unsigned][zerofill]
        • 2.4 MEDIUMINT([M])[unsigned][zerofill]
        • 2.5 INT([M])[unsigned][zerofill]
        • 2.6 BIGINT([M])[unsigned][zerofill]
      • 3. 说明
    • 参考资料


一. 背景

  • 在设计数据库表的时候,如果字段是数值型,经常会有几个选项(tinyint [unsigned]smallint [unsigned]mediumint [unsigned]int [unsigned]bigint [unsigned]),但总不知道该使用哪个类型,下面总结了一下。

二. INT类型的总结

1. 概述

数值类型 占用字节 数据范围 无符号数据范围
tinyint 1 -128~127 0~255
smallint 2 -32768~32767 0~65535
mediumint 3 -8388608~8388607 0~16777215
int 4 -2147483648~2147483647 0~4294967295
bigint 8 -9223372036854775808~9223372036854775807 0~18446744073709551615

2. 详述

  • 说明:1 bytes = 8 bit,因此一个字节最多可以代表的数据长度是2的8次方(11111111),转换为实际值即-128到127。

2.1 bit[M]

  1. 概述:位字段类型。
  2. M:表示每个值包含的位数,如bit(2)表示包含2位的一个值。M的范围是[1,64],如果M缺省,默认为1。

2.2 TINYINT([M])[unsigned][zerofill]

  1. 概述:很小的整数。
  2. M:默认为4。
  3. 数值范围
    • 带符号的范围:-128到127
    • 无符号的范围:0到255
  4. boolean类型:是TINYINT(1)的同义词。0值被视为假;非0值视为真。

2.3 SMALLINT([M])[unsigned][zerofill]

  1. 概述:小的整数。
  2. M:默认为6。
  3. 数值范围
    • 带符号的范围: -32768到32767
    • 无符号的范围:0到65535

2.4 MEDIUMINT([M])[unsigned][zerofill]

  1. 概述:中等大小的整数。
  2. M:默认为9。
  3. 数值范围
    • 带符号的范围: -8388608到8388607
    • 无符号的范围:0到16777215

2.5 INT([M])[unsigned][zerofill]

  1. 概述:普通大小的整数。
  2. M:默认为11。
  3. 数值范围
    • 带符号的范围: -2147483648到2147483647
    • 无符号的范围:0到4294967295

2.6 BIGINT([M])[unsigned][zerofill]

  1. 概述:大整数。
  2. M:默认为20。
  3. 数值范围
    • 带符号的范围: -9223372036854775808到9223372036854775807
    • 无符号的范围:0到18446744073709551615

3. 说明

  • M的含义:并不是指存储在数据库中的具体长度。只有同时指定了zerofill,M才会发挥作用,即左边用0来填充。
  • 示例:tinyint(1)和tinyint(2)的区别
CREATE TABLE `test` (                                  
          `id` int(11) NOT NULL AUTO_INCREMENT,                                                  
          `state1` tinyint(1) unsigned zerofill DEFAULT NULL,   
          `state2` tinyint(2) unsigned zerofill DEFAULT NULL,  
          `state3` tinyint(3) unsigned zerofill DEFAULT NULL,  
          `state4` tinyint(4) unsigned zerofill DEFAULT NULL,  
          PRIMARY KEY (`id`)                                   
        ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8  
 
insert into test (state1,state2,state3,state4) values(4,4,4,4);
select * from test;
  • 结果
id state1 state2 state3 state4
1 4 04 004 0004

参考资料

  • tinyint(1)和tinyint(4)的区别和用法
  • mysql中tinyint(1)与tinyint(2)的区别

你可能感兴趣的:(Database,1024程序员节)