mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11到底表示什么...

首先:理清楚,字节、字、位、比特的概念和关系

1、位(bit)
来自英文bit,音译为“比特”,一般用“b”表示,表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态;两个二进制位可以表示00、01、10、11四种状态;三位二进制数可表示八种状态

2、字节(byte)
字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。
字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1Byte=8bit)。八位二进制数最小为00000000,最大为11111111;通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码。

3、字
计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。一个字通常由一个或多个(一般是字节的整数位)字节构成。例如286微机的字由2个字节组成,它的字长为16;486微机的字由4个字节组成,它的字长为32位机。
计算机的字长决定了其CPU一次操作处理实际位数的多少,由此可见计算机的字长越大,其性能越优越。

                1位=1比特(这两个是一个东西)
                1字节=8位

                1字=2字节
                1字=16位

image

然后,mysql的基本数据类型如下:

435af4ab06ee408989e109c785a593187a1.jpg

这些类型,是定长的,其容量是不会随着后面的数字而变化的,比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。

那么后面的11和8,有啥用呢。

http://zhidao.baidu.com/link?url=b0Z-WIhggaErl3uhMrAhoEXQG_3zotyd7r31O3RXSYiFJo1Cad-NeWN8cFXZFI50yVG_lpKooT7OjLhIa20ephKFJYD-fV9ZAv_o63AfyVq

mysql数据库中以 :数据类型(m)  来约束数据,其中 数字m在不同的数据类型中表示含义是不同的。 咱们这里只讲整数。

整型数系统已经限制了取值范围,tinyint占1个字节、int占4个字节。所以整型数后面的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。

tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。

当字符长度超过(m)时,相当于啥都没发生;

当字符长度小于(m)时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充),

设置tinyint(2) zerofill 你插入1时他会显示01;设置tinyint(4) zerofill 你插入1时他会显示0001。

所以,没有zerofill(填充零),(m)就是无用的。

 

在mysql中我做过实验,对于一个tinyint类型的字段,不管它是tinyint(1)还是tinyint(2)还是tinyint(3),

当你插入大于127的数,都会报错:超出范围值

 

32696b5b0f6f73119700260053e97f60789.jpg

 

总结:int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。这个东西基本没有意义,除非你对字段指定zerofill。

所以我们在设计mysql数据库时,

建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。

 

http://blog.csdn.net/longyulu/article/details/7326581

该文很好地总结了mysql所有的数据类型。

我在建一个float类型的字段时,故意建成float(2,3)型,是错误的。报错如下。

985151-20160726161405903-1898416054.png

第一个数字M,代表总长度限制(总长度包括小数位和整数位),2代表总长度不能超过2个字符,比如2.34,就超过了2位总长度;

第二个数字D,代表小数位的长度限制。0.2表示占用了1个小数位。

这样看,当然M必需大于等于D。

比如设置为float(2,2),那么写入12.3这个数字时,会报错:超出范围值

比如设置为float(2,1),那么写入12.3这个数字时,会报错:超出范围值

比如设置为float(5,2)那么写入123.126这个数字时,实际插入的是123.13

(经过测试发现是 5舍6入)

比如设置为float(5,2)那么写入1233.12这个数字时,会报错:超出范围值

那么设置为float(0,0),则相当于不受限制,或者说受float本身的精度限制。

 对于mysql的浮点型,看这篇:http://www.jb51.net/article/31723.htm

转载于:https://my.oschina.net/u/2615680/blog/3076238

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值