MySQL数据类型--浮点数类型和定点数类型
2016-03-16 10:21
465 查看
MySQL中使用浮点数类型和定点数类型来表示小数。
浮点数类型包括单精度浮点数(float型)和双精度浮点数(double型)。定点数类型就是decimal型。OK,现在我们来看看这几种数据类型的取值范围和存数的字节数。
关于上表的解释:
1,Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。
2,MySQL中可以指定浮点数和定点数的精度。其基本形式如下:数据类型(M,D)。
其中,“数据类型”参数是浮点数或定点数的数据类型名称,M参数称为精度,是数据的总长度,小数点不占位置。D参数成为标度,是指小数点后面的长度是D。
举个例子:float(6,2)的含义数据是float型,数据长度是6,小数点后保留2位。所以,1234.56是符合要求的。
3,注意:上述指定的小数精度的方法虽然都适用于浮点数和定点数,但不是浮点数的标准用法。建议在定义浮点数时,如果不是实际情况需要,最好不要使用,如果使用了,可能会影响数据库的迁移。
4,相反,对于定点数而言,decimal(M,D)是定点数的标准格式,一般情况下可以选择这种数据类型。
5,如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。
OK,现在我们来举几个实际的例子:
1,指定精度的情况。
建表语句如下:CREATE TABLE `linkinframe`.`test` ( `id` INT NOT NULL, `a` FLOAT(6,2) NULL, `b` DOUBLE(6,2) NULL, `c` DECIMAL(6,2) NULL, PRIMARY KEY (`id`));
现在我们往表中插入几条数据:
INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('1', '1.111', '1.117','1.117'); INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('2', '1234567', '1234.892','1234.892');
数据库现在显示数据如下:
2,未指定精度的情况。
浮点数和定点数有其默认的精度,float和double默认会保存实际精度,但这与操作系统和硬件的精度有关。decimal型的默认整数位为10,小数位为0,即默认为整数。建表语句如下:
CREATE TABLE `linkinframe`.`test` ( `id` INT NOT NULL, `a` FLOAT NULL, `b` DOUBLE NULL, `c` DECIMAL NULL, PRIMARY KEY (`id`));现在我们插入一条数据:
INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('1', '3.1415', '3.14159','3.14159');
OK,现在数据库显示如下:
总结:
在MySQL中,定点数以字符串形式存储,因此,其精度比浮点数要高,而且浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数decimal比较安全。相关文章推荐
- mac 下 mysql5.7 密码 重置
- 如何收缩Mysql的ibdata1文件
- MySQL中alter小秘密
- mysql中多表不关联查询
- MySQL之alter语句用法总结
- mysql 获取当前日期及格式化
- MySQL 索引的使用
- saltstack:使用教程之一安装及客户端返回写入MySQL
- mysql 出现错误Incorrect file format
- 高并发web系统优化总结
- MySql5.6Window超详细安装教程(msi 格式的安装)
- MySQL函数
- MySQL的 explain 解析
- Windows下mysql忘记root密码的解决方法
- windows下如何安装配置mysql-5.7-m14-winx64(zip格式的安装)
- MySql之char与varchar
- mysql批量删除指定前缀或后缀表
- MySQL优化—工欲善其事,必先利其器之EXPLAI
- IT忍者神龟之Windows安装MySQL解压版本
- Mysql