mysql中decimal,numeric,double,float的区别

原创 2017年11月10日 18:35:46

概述:

简单来说decimal,numeric属于标准数据类型,指定精度和刻度;decimal的存储大小不确定,numeric的存储大小默认8个字节。
double,float属于非标准数据类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。

float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12。

数据定义
float(M,S) M为全长,S为小数点后长度。对于不精准的例子,网络上很多,Copy如下:
mysql> create table t1(c1 float(10,2), c3decimal(10,2)); 
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1 values(9876543.21, 9876543.12);                   
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;                        
+----------------+-----------------+
| c1                | c3                   |
+----------------+-----------------+
| 9876543.00 | 9876543.12 | 
+----------------+------------------+
2 rows in set (0.00 sec)

再举例: DECIMAL(5,2)

mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default null,
id3 decimal(5,2) default null );

mysql> insert into t1 values(1.2345,1.2345,1.2345);
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> show warnings;
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)

 
1.2345 --- 小数点后最多2位,所以保存可以,自动四舍五入数据截断,但会报waning
12.34 --- OK
1234.5 --- 因为小数部分未满2位,要补0.所以保存应该1234.50。所以整个位数超出了5,保存报错。
1.2 --- 小数未满部分补0。按照1.20保存。
 
默认状态比较
浮点数如果不写经度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0) 来操作,如果数据超过了精度和标度值,系统会报错。

版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL decimal、numeric 和double数据类型

场景: DECIMAL[(precision, [scale])] [UNSIGNED] [ZEROFILL] 存储大小:不确定 描述:存储精度重要的浮点数,如货币值...
  • xyj0808xyj
  • xyj0808xyj
  • 2015年11月25日 01:15
  • 1908

MySQL中Decimal类型和Float Double等区别

MySQL中存在float,double等非标准数据类型, 也有decimal这种标准数据类型。 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符...
  • moqiang02
  • moqiang02
  • 2014年10月30日 11:08
  • 6447

mysql中float,double,decimal的差别

float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币要求精确度高的数据。 [例子] 新建一个tab表...
  • mranyang
  • mranyang
  • 2016年01月25日 10:31
  • 758

MySQL float,double,decimal数据类型区别

1. 浮点数 (SINGLE,DOUBLE,FLOAT,REAL) 在计算机中是纯数字,即由二进制来表示的数字。由于规定了长度,所有是离散形的,也就是说无法准确表示定义区间内的所有实数。 如果想了解详...
  • a372048518
  • a372048518
  • 2012年04月24日 09:44
  • 2234

Mysql中NUMERIC和DECIMAL类型区别比较(已测5.6)

 原文地址:http://www.111cn.net/database/mysql/55524.htm numeric与decimal表示的数据类型是有的区别的,主要在精确度上,更详细的确要看...
  • yiyan1
  • yiyan1
  • 2015年05月07日 10:32
  • 5072

MySQL中的float和decimal类型有什么区别

decimal 类型可以精确地表示非常大或非常精确的小数。大至 1028(正或负)以及有效位数多达 28 位的数字可以作为 decimal类型存储而不失其精确性。该类型对于必须避免舍入错误的应用程序(...
  • sinat_21785599
  • sinat_21785599
  • 2017年01月11日 10:56
  • 3086

float,double,decimal的区别于误解

在精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。   考虑下面...
  • m1654399928
  • m1654399928
  • 2017年01月25日 13:45
  • 3697

mysql float double decimal 区别

from http://code.rohitink.com/2013/06/12/mysql-integer-float-decimal-data-types-differences/ M...
  • hotdust
  • hotdust
  • 2016年06月08日 15:28
  • 835

数据库中float,double与decimal的区别

1.Decimal 数据包含存储在最小有效数上的数据。在 SQL Server中,小数数据使用 decimal 或 numeric 数据类型存储。存储 decimal 或 numeric 数值所需的字...
  • hanghangde
  • hanghangde
  • 2016年01月08日 16:20
  • 2714

C#中对于float,double,decimal的误解

一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖。浮点型 Name...
  • ccy3253
  • ccy3253
  • 2008年01月28日 21:54
  • 13559
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql中decimal,numeric,double,float的区别
举报原因:
原因补充:

(最多只允许输入30个字)