MySQL中存在float,double等非標(biāo)準(zhǔn)數(shù)據(jù)類型,也有decimal這種標(biāo)準(zhǔn)數(shù)據(jù)類型。
其區(qū)別在于,float,double等非標(biāo)準(zhǔn)類型,在DB中保存的是近似值,而Decimal則以字符串的形式保存數(shù)值。
float,double類型是可以存浮點(diǎn)數(shù)(即小數(shù)類型),但是float有個(gè)壞處,當(dāng)你給定的數(shù)據(jù)是整數(shù)的時(shí)候,那么它就以整數(shù)給你處理。這樣我們在存取貨幣值的時(shí)候自然遇到問題,我的default值為:0.00而實(shí)際存儲是0,同樣我存取貨幣為12.00,實(shí)際存儲是12。
幸好mysql提供了兩個(gè)數(shù)據(jù)類型:decimal,這種數(shù)據(jù)類型可以輕松解決上面的問題:decimal類型被 MySQL 以同樣的類型實(shí)現(xiàn),這在 SQL92 標(biāo)準(zhǔn)中是允許的。他們用于保存對準(zhǔn)確精度有重要要求的值,例如與金錢有關(guān)的數(shù)據(jù)。
數(shù)據(jù)定義
float(M,S) M為全長,S為小數(shù)點(diǎn)后長度。對于不精準(zhǔn)的例子,網(wǎng)絡(luò)上很多,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 --- 小數(shù)點(diǎn)后最多2位,所以保存可以,自動(dòng)四舍五入數(shù)據(jù)截?cái)?但會(huì)報(bào)waning
12.34 --- OK
1234.5 --- 因?yàn)樾?shù)部分未滿2位,要補(bǔ)0.所以保存應(yīng)該1234.50。所以整個(gè)位數(shù)超出了5,保存報(bào)錯(cuò)。
1.2 --- 小數(shù)未滿部分補(bǔ)0。按照1.20保存。
默認(rèn)狀態(tài)比較
浮點(diǎn)數(shù)如果不寫經(jīng)度和標(biāo)度,會(huì)按照實(shí)際精度值保存,如果有精度和標(biāo)度,則會(huì)自動(dòng)將四舍五入后的結(jié)果插入,系統(tǒng)不會(huì)報(bào)錯(cuò);定點(diǎn)數(shù)如果不寫精度和標(biāo)度,則按照默認(rèn)值decimal(10,0) 來操作,如果數(shù)據(jù)超過了精度和標(biāo)度值,系統(tǒng)會(huì)報(bào)錯(cuò)。
以上這篇MySQL中Decimal類型和Float Double的區(qū)別(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- mysql中decimal數(shù)據(jù)類型小數(shù)位填充問題詳解
- MySQL decimal unsigned更新負(fù)數(shù)轉(zhuǎn)化為0
- 淺談MySQL中float、double、decimal三個(gè)浮點(diǎn)類型的區(qū)別與總結(jié)
- 深入分析MySQL數(shù)據(jù)類型 DECIMAL
- MySQL中decimal類型用法的簡單介紹
- 詳解MySQL數(shù)據(jù)類型DECIMAL(N,M)中N和M分別表示的含義
- MySQL數(shù)據(jù)類型中DECIMAL的用法實(shí)例詳解
- MySQL數(shù)據(jù)類型DECIMAL用法詳解