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

下表是各类型信息:
在这里插入图片描述

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。  BOOL,BOOLEAN

是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。

3. SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6

小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。

4. MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9

中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。

5. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11

普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。

注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。

M指最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。 如果字段数据类型是 int(4),则:当显示数值
10 时,在左边要补上 “00”;

当显示数值 100 是,在左边要补上“0”;

当显示数值 1000000 时,已经超过了指定宽度“(4)”,因此按原样输出。

这个M=4我们可以简单的理解成为, 我们建立这个长度是为了告诉MYSQL数据库我们这个字段的存储的数据的宽度为4位数,
当然如果你不是5位数(只要在该类型的存储范围之内)MYSQL也能正常存储.

int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M)
跟 int 数据类型是相同的。 int(M) 只有跟 zerofill 结合起来,才能使我们清楚的看到不同之处

定义时需要注意是否使用 unsigned 符号类型,再就是显示补齐宽度值

6. BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20

大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。

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中用来判断是否需要进行对据列类型转换的规则:

  1. 在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
  2. 只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
  3. 如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.

例外:长度小于4个字符的char数据列不会被转换为varchar类型


注释

在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 MySQL中,int 数据类型是主要的整数数据类型。

在数据类型优先次序表中,bigint 位于 smallint 和 int 之间。

只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。MySQL不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。


简单说一下字节与字符的区别:

2个字节一个汉字,比如“的”;
全角标点2个字节,半角标点一个字节
一个字母一个字节
字符指一个字母或一个字或一个标点或一个符号,不一定几个字节,看情况定
————————————————

原文链接:https://blog.csdn.net/shuke_zheng/article/details/78979343
http://www.jb51.net/article/31946.htm

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值