定点型
MySQL中使用浮点数类型和定点数类型来表示小数。
浮点型在数据库中存放的是近似值,定点类型在数据库中存放的是精确值。
浮点数类型包括单精度浮点数(float型)和双精度浮点数(double型)。定点数类型就是decimal型。
Decimal型的取值范围和double(8字节)相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。
MySQL中可以指定浮点数和定点数的精度。
其基本形式如下: 数据类型(M,D)
“数据类型”参数是浮点数或定点数的数据类型名称,M参数称为精度,是数据的总长度,小数点不占位置,不超过64。D参数成为标度,是指小数点后面的长度是D,D<30且D<M。
举两个例子:
float(6,2)
的含义数据是float型,数据长度是6,小数点后保留2位。所以,1234.56是符合要求的。
创建表
create table test(
float_num float(10,2),
double_num double(20,2),
decimal_num decimal(20,2)
)engine=innodb charset=utf8;
插入数据
insert into test values(1234567.111,1234567890000.666,123456711111.222);
insert into test values(1234567.11,12345678900000000.666,12345671111111111.222);
查看数据
select * from test;
观察表中的数据
decimal型无论写入数据中的数据是多少,都不会存在精度丢失的问题。
decimal型常见于银行系统,互联网金融等,是以字符串的形式进行保存的。默认为decimal(10,0).
浮点数和定点数有其默认的精度,float和double默认会保存实际精度,但这与操作系统和硬件的精度有关。decimal型的默认整数位为10,小数位为0,即默认为整数。
数据类型的选择
1.在指定数据类型的时候一般采用从小原则,能用float类型的就不用double类型。
2.不要把数据表设计的太复杂
3.数据库的设计结果一定是效率与可扩展的折中
4.根据选定的存储引擎,确定合适的数据类型
如MyISAM引擎,最好使用定长char数据列代替变长varchar数据列
MEMORY引擎,用char和varchar都一样,都是作为char类型处理
InnoDB引擎,建议使用varchar类型,数据行使用的是存储总量,而char平均占用空间要多于varchar.
感谢大家,点赞,收藏,关注,评论!