具體介紹MySQL中Decimal類型和Float Double的區別

下面小編就為大家帶來一篇mysql中decimal類型和mysql double的區別(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

mysql中存在float,double等非標準mysql,也有decimal這種標準數據類型。

其區別在于,float,double等非標準類型,在DB中保存的是近似值,而Decimal則以字符串的形式保存數值。
float,double類型是可以存浮點數(即小數類型),但是float有個壞處,當你給定的數據是整數的時候,那么它就以整數給你處理。這樣我們在存取貨幣值的時候自然遇到問題,我的default值為:0.00而實際存儲是0,同樣我存取貨幣為12.00,實際存儲是12。

幸好mysql提供了兩個數據類型:decimal,這種數據類型可以輕松解決上面的問題:decimal類型被 MySQL 以同樣的類型實現,這在 SQL92 標準中是允許的。他們用于保存對準確精度有重要要求的值,例如與金錢有關的數據。

數據定義

float(M,S) M為全長,S為小數點后長度。對于不精準的例子,網絡上很多,mysql如下:

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 — 小數點后最多2位,所以保存可以,自動四舍五入數據截斷,但會報waning

12.34 — OK

1234.5 — 因為小數部分未滿2位,要補0.所以保存應該1234.50。所以整個位數超出了5,保存報錯。

1.2 — 小數未滿部分補0。按照1.20保存。

默認狀態比較

浮點數如果不寫經度和標度,會按照實際精度值保存,如果有精度和標度,則會自動將四舍五入后的結果插入,系統不會報錯;定點數如果不寫精度和標度,則按照默認值decimal(10,0) 來操作,如果數據超過了精度和標度值,系統會報錯。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享