浮點數和定點數都可以用型別名稱後加「(m,d)」的方式來進行表示,「(m,d)」表示該值一共顯示m 位數字(整數字+小數字),其中d 位位於小數點後面,m 和d 又稱為精度和標度。例如,定義為 float(7,4)的乙個列可以顯示為-999.9999。mysql 儲存值時進行四捨五入,因此如果在 float(7,4)列內插入 999.00009,近似結果是 999.0001。值得注意的是,浮點數後面跟「(m,d)」的用法是非標準用法,如果要用於資料庫的遷移,則最好不要這麼使用。float 和 double 在不指定精度時,缺省會按照實際的精度(由實際的硬體和作業系統決定)來顯示,而 decimal 在不指定精度時,預設的整數字為 10,預設的小數字為 0。
解決方案1、decimal
在mysql中,帶有小數的精確運算可以使用decimal型別
create table t3 (i int, d1 decimal(10,3), d2 decimal(10,3));
+------+---------+-------+| i | a | b |
+------+---------+-------+
| 6 | -51.400 | 0.000 |
+------+---------+-------+
限制decimal的精確表示為decimal(m,d),其中m最大為65,d最大為30。因此其表示的範圍是遠遠小於double所能表示的範圍
2、基於應用的解決方案
比如商品**涉及到小數,用20.95元表示,那麼可以把**變成以分為單位,即變成2095。
結論不要使用float、double以及其等價型別做精確計算。如果要在mysql中做精確計算,推薦使用decimal或者將相關計算任務交給應用。
8.4 日期型別選擇
mysql 提供的常用日期型別有date、time 、datetime、timestamp,它們之間的區
別在第3 章中已經進行過詳細論述,這裡就不再贅述。下面主要總結一下選擇日期型別的原份」,那麼用1 個位元組來儲存的year 型別完全可以滿足,而不需要用4 個位元組來則。
儲存的date 型別。這樣不僅僅能節約儲存,更能夠提高表的操作效率。
而不要使用timestamp。因為timestamp 表示的日期範圍比datetime 要短得多。
期型別中只有它能夠和實際時區相對應。
8.5 小結
本章中主要介紹了常見資料型別的選擇原則,簡單歸納如下。
對於字元型別,要根據儲存引擎來進行相應的選擇。 對精度要求較高的應用中,建議使用定點數來儲存數值,以保證結果的準確性。
對含有text 和blob 欄位的表,如果經常做刪除和修改記錄的操作要定時執行
optimize table 功能對錶進行碎片整理。
日期型別要根據實際需要選擇能夠滿足應用的最小儲存的日期型別。
第八章 選擇合適的資料型別
char和varchar char屬於固定長度的字元型別,varchar屬於可變長度。不同儲存引擎對char和varchar的使用原則不同。text和blob 儲存較大文字。二者差別 blob能用來儲存二進位制資料,比如 而text只能儲存字元資料。1 blob和text值會引起一些效能問題,特別是...
第八章 排序 選擇排序
資料結構基礎 嚴蔚敏 人郵教育出版社 簡單選擇排序 include intselectionsort int a,int n t a i a i a minj a minj t sw if i minj return sw int main sw selectionsort a,n for i 0 ...
第八章。指標型別轉換
第八章。指標型別轉換 當我們初始化乙個指標或給乙個指標賦值時,賦值號的左邊是乙個指標,賦值號的右邊是乙個指標表示式。在我們前面所舉的例子中,絕大多數情況下,指標的型別和指標表示式的型別是一樣的,指標所指向的型別和指標表示式所指向的型別是一樣的。例十四 1。float f 12.3 2。float f...