mysql decimal、numeric数据类型

 

可能做程序的人都知道,float类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12.
幸好mysql提供了两个数据类型:numeric和decimal,这两种数据类型可以轻松解决上面的问题:
NUMERIC 和 DECIMAL 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例 如:

salary DECIMAL(5,2)

在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -99.99 到 99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。

译者注:

M 与D 对DECIMAL(M, D) 取值范围的影响

类型说明 取值范围(MySQL < 3.23) 取值范围(MySQL >= 3.23) 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> DECIMAL ( 4 1 - 9.9  到  99.9   - 999.9  到  9999.9  
   DECIMAL ( 5 1 - 99.9  到  999.9   - 9999.9  到  99999.9  
   DECIMAL ( 6 1 - 999.9  到  9999.9   - 99999.9  到  999999.9  
   DECIMAL ( 6 2 - 99.99  到  999.99   - 9999.99  到  99999.99  
   DECIMAL ( 6 3 - 9.999  到  99.999   - 999.999  到  9999.999

 

 

# 在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M + 2, D) 的取值范围。

还有一种数据类型也是比较棒的: 那就是LongBlob,这种数据类型可以直接把图像文件存到数据库中!

 

 

        

 

 

笔者,最近在研究mysql的decimal数据类型,现把数据实验结果公布如下

数据库版本:Server version: 5.0.45 Source distribution

1、创建表结构

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> create   table  ta (a  float ,b  decimal ( 10 , 5 ));

 

 

2、插入数据

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> insert   into  ta (a,b)  values ( 1 , 12345.123423 );

 

 

实际插入的b列数据为:12345.12342

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> insert   into  ta (a,b)  values ( 1 , 123456.1234 );

 

 

实际插入的b列数据为:99999.99999

结论:decimal数据类型,

1、当插入的整数部分的值超过了其表示范围后就直接忽略了小数部分的值,并以最大值填充。

2、当整数部分合法,小数部分多余的位数,直接截断。

二、numeric(M,D)

当看到numeric数字类型后,大部分都会看成了number,我也几次都弄错了。

numeric数字类型和decimal数字类型的一样的

修改a列字段类型: alter table ta change a a numeric(10,5);

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> show  create   table  ta;
|  ta     |   CREATE   TABLE  `ta` (
`a` 
decimal ( 10 , 5 default   NULL ,
`b` 
decimal ( 10 , 5 default   NULL
) ENGINE
= MyISAM  DEFAULT  CHARSET = utf8  |

 

 

可见,在myslq5.0中,numeric和decimal数据类型是一致的,两者的精度均准确为M位数字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值