首先,對於精度比較高的東西,比如money,我會用decimal類型,不會考慮float,double,因為他們容易產生誤差,
DECIMAL列的聲明文法是DECIMAL(M,D)。在MySQL 5.1中,參量的取值範圍如下:
· M是數位最大數(精度)。其範圍為1~65(在較舊的MySQL版本中,允許的範圍是1~254)。
· D是小數點右側數位數目(標度)。其範圍是0~30,但不得超過M。
說明:float佔4個位元組,double佔8個位元組,decimail(M,D)占M+2個位元組。
如DECIMAL(5, 2) 的最大值為9 9 9 9 . 9 9,因為有7 個位元組可用。
譯者註:
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、當整數部分合法,小數部分多餘的位元,直接截斷。