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) 

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、創建表結構

create table ta (a float,b decimal(10,5));

 

2、插入數據

insert into ta (a,b) values(1,12345.123423);

 

實際插入的b列數據爲:12345.12342

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);

show create table ta;
| ta    | CREATE TABLE `ta` (
`a` 
decimal(10,5default NULL,
`b` 
decimal(10,5default NULL
) ENGINE
=MyISAM DEFAULT CHARSET=utf8 |

 

可見,在myslq5.0中,numeric和decimal數據類型是一致的,兩者的精度均準確爲M位數字。 


發佈了26 篇原創文章 · 獲贊 5 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章