数值类的数据列类型
数值型的列类型包括整型和浮点型两大类。
数据列类型 |
存储空间 |
描述 |
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~9233372036854775807,不带符号:0~18446744073709551615 |
FLOAT |
4字节 |
单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38 |
DOUBLE |
8字节 |
双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308 |
DECIMAL |
M+2字节 |
以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。 |
1. 整型数据列类型
MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。
声
明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指
定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是
INT整型所允许的最大值。
2. 浮点型数据列类型
MySQL有三种浮点型数据列类型,分别是:FLOAT,DOUBLE和DECIMAL。浮点类数据类型有一个最大可表示值和一个最小非零可表示值,最小非零可表示值决定了该类型的精确度。
MySQL 4.0.2版之后,FLOAT和DOUBLE都可以指定UNSIGNED属性。当指定该属性时,取值范围不平移到正数区间,而只是简单地把浮点类型的负数部份去掉。
浮
点类型也有M(1~255)和D(1~30,且不能大于M-2)。分别表示显示宽度和小数位数。M和D在FLOAT和DOUBLE中是可选的,默认,当
MySQL版本大于3.23.6时,FLOAT和DOUBLE类型将被保存为硬件所支持的最大精度。DECIMAL的M和D值在MySQL3.23.6后
可选,默认D值为0,M值为10。
3. 如何选择数值类数据列类型?
为
了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最适合的数据列类型。如果把一个超出数据列取值范围的数存入该列,则
MySQL就会截短该值,如:我们把99999存入SMALLINT(3)数据列里,因为SMALLINT(3)的取值范围是-32768~32767,
所以就会被截短成32767存储。显示宽度3不会影响数值的存储。只影响显示。
对于浮点数据列,存入的数值会被该列定义的小数位进行四舍五入。如把一个1.234存入FLOAT(6.1)数据列中,结果是1.2。
DECIMAL
与FLOAT和DOUBLE的区别是:DECIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定的。它的优点是,不会象FLOAT和
DOUBLE类型数据列那样进行四舍五入而产生误差,所以很适合用于财务计算;而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影
响运算效率。DECIMAL(M,D)总共要占用M+2个字节。
4. 数值类数据列的属性
-
ZEROFILL属性适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0。
-
UNSIGNED属性不允许数据列出现负数。
-
AUTO_INCREMENT属性可生成独一无二的数字序列。只对整数类的数据列有效。
-
NULL和NOT NULL属性设置数据列是否可为空。
-
DEFAULT属性可为数据列指定默认值。