8 2 第八章 選擇合適的資料型別

2021-07-29 19:24:16 字數 1679 閱讀 8152

浮點數和定點數都可以用型別名稱後加「(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...