首先,對於精度比較高的東西,比如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
# 在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、當整數部分合法,小數部分多余的位數,直接截斷。