PHP学习第11课:mysql 数据类型之数字
1、Mysql 中的数字有两种类型(整型,浮点型,Decimal):
整型:tinyint,smallint,mediuint,int ,bigint 共5种;
浮点型:float,double 共3种;
特殊型:decimal
见下图:

1、关于整型,首先我们需要了解的知识点如下:
(1)表示的含义,很明了tiny->small->mediu->int->big是一个逐渐变大的过程,代表可以存储的数字范围宽广(注意,这里是数字的范围宽广,而不是数字的大小,因为整型还有有符号和无符号的区分);
(2)存储空间,1->2->3->4->8字节(注意字节的概念,1字节=8比特即1Byte=8bit,字节是数据存储单位,比特是数据传输单位,而数据传输时二进制的,所以1bit代表数据传输中的1或0,这个很重要,希望同学了解);
(3)取值范围,这个既是根据字节和比特的关系得来的,稍后我们举个例子加以说明。


2、以常用的INT为例,其存储空间是4个字节,为什么是取值范围是:
带符号:-2147483648 ~ 2147483647
无符号:0~4294967295
以下是解释:
(1)字段属性UNSIGNED是区分有无符号的标志,设置了unsigned表示禁止负数,取值从0开始。
(2)INT的存储空间是4个字节=4*8=32bit,表示可以存储最多32位的二进制数据流(0或1)。
(3)32位的二进制数据流,转换成10进制,就是2³²;
(4)无符号型,从0开始,所以最大整数为2³²-1;
(5)有符号型,非负数个数 = 负数个数 = 2³²/2 = 2³¹ ,同是由于非负数个数还包括0,所以存储范围为-2³¹~2³¹-1。
其他类型可依次类推得到。
特别注意的是:
int 在32位系统中为,4字节=32bit;
在16位系统中为,2字节=16bit;
在64位系统中为,8字节=64bit。可存储的数的范围是根据bit得到的。


3、int(3)和int(10)有什么区别:
(1)当设置属性包含zerofill的时候才可以看到差异,否则可认为没有差别;
(2)zerofill 顾名思义“用0来填充”,比如当把"12"存储到int(3)或int(10)时,因为不足3位和10位,存储结果分别是:012,0000000012;
(3)当位数足够的时候,当然不需要0来填充了;
(4)int(M)不管M是1,2,3,4,5,10等等,在磁盘上都是占用 4 btyes 的存储空间(32位系统),取值范围不变。



1、浮点型包含三种:单精度浮点数,双精度浮点数,以字符串形式表示的浮点数;
这里面有这个几个问题:
(1)什么是浮点数?
(2)什么是单精度浮点数和双精度浮点数?
解释:
浮点数和定点数是相对的,这里的点指的是小数点,浮点数小数点位置是不固定的,定点数的小数点是固定的。
单精度浮点数:占用4个字节(32位)存储空间,最多有7位十进制有效数字(包含小数点),超出部分会“4舍5入”;
双精度浮点数:占用8个字节(64位)存储空间,可以表示15或16位十进制的有效数字(包含小数点),超出部分会“4舍5入”。




1、decimal(M,D) 是以字符串形式表示的浮点数:
举例说明:decimal(10,0):最大存储9999999999(10个9)
decimal(6,2):最大存储9999.99(6个9)
decimal(10,6):最大存储9999.999999(10个9)

