mysql中int、bigint、smallint 和 tinyint的区别详细介绍

Type数据库

Storage性能

Minimum Value内存

Maximum Valueit

 

(Bytes)table

(Signed/Unsigned)im

(Signed/Unsigned)数据

TINYINT查询

1top

-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


1 bytes = 8 bit ,一个字节最多能够表明的数据长度是2的8次方 11111111 在计算机中也就是
-128到127
1.BIT[M]
位字段类型,M表示每一个值的位数,范围从1到64,若是M被忽略,默认为1
2.TINYINT[(M)] [UNSIGNED] [ZEROFILL]  M默认为4
很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
3. BOOL,BOOLEAN
是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。
4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6
小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9
中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
6. INT[(M)] [UNSIGNED] [ZEROFILL]   M默认为11
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20
大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
注意:这里的M表明的并非存储在数据库中的具体的长度,之前老是会误觉得int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。
tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill是有用,
如tinyint(4),若是实际值是2,若是列指定了zerofill,查询结果就是0002,左边用0来填充。
 
---------------------
char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
  char(M)类型的数据列里,每一个值都占用M个字节,若是某个长度小于M,MySQL就会在它的右边用空格字符补足.
(在检索操做中那些填补出来的空格字符将被去掉)
在varchar(M)类型的数据列里,每一个值只占用恰好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
 
在MySQL中用来判断是否须要进行对据列类型转换的规则
  一、在一个数据表里,若是每个数据列的长度都是固定的,那么每个数据行的长度也将是固定的.
  二、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
  三、若是某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型
 

 

有符号int最大能够支持到约22亿,远远大于咱们的需求和MySQL单表所能支持的性能上限。对于OLTP应用来讲,单表的规模通常要保持在千万级别,不会达到22亿上限。若是要加大预留量,能够把主键改成改成无符号int,上限为42亿,这个预留量已是很是的充足了。 使用bigint,会占用更大的磁盘和内存空间,内存空间毕竟有限,无效的占用会致使更多的数据换入换出,额外增长了IO的压力,对性能是不利的。 所以推荐自增主键使用int unsigned类型,但不建议使用bigint。

相关文章
相关标签/搜索