選擇優化的數據類型java
1.更小的一般更好
2.簡單就好
3.儘可能避免null函數
1.整型優化
tinyint 8 位 -128 ~ 127 對應 Byte (java)
smallint 16位 -32768~32767 對應 Short (java)
mediumint 24位
int 32位 對應 Integer(java)
bitint 64位 對應 Long (java)
注意:定義如:int(10) 和 int(20) 是沒有意義的,不會改變實際的存儲值spa
2.實數設計
float 浮點型,含字節數爲4,32位,(7個有效位) 對應 Float (java)ip
double 雙精度實型,含字節數爲8,64位 ,(7個有效位) 對應 Double(java)內存
decimal 數字型,128位, 小數28個有效位,不存在精度損失,經常使用於銀行賬目計算。md5
說明1: float(5,3) 5表示小數左邊+右邊總的位數, 3表示 小數位最多3位。這樣整數位爲2位
如: 1.353 正常 10.2335 正常(最後一位四捨五入) 100.1 溢出 ci
說明2:字符串
float f = 345.98756f;--結果顯示爲345.9876,只顯示7個有效位,對最後一位數四捨五入。
double d=345.975423578631442d;--結果顯示爲345.975423578631,只顯示15個有效位,對最後一位四捨五入。
數值存儲範圍越小的精度越高,存儲數值範圍越大,精度就越不許確,若是存儲正常金額的狀況下,使用money,好處在於能夠存儲不指定的小數點位數的數值,比較真實。若是對於既要求精度,又固定小數點位數的數值存儲,採用decimal(numeric),優勢在於能夠自定義小數點位數,精度高。如特殊狀況,如數值範圍巨大隻能用float(real)類型了,此類型通常不提倡使用。
3字符型
varchar 變長 如 varchar(10) ,將存儲10個字符長度 ,設計中不要刻意的將字符長度調大,
大長度會消耗更多的內存 ,最大 65535
char 定長 適合存在密碼的md5值,等其餘固定長度的字符 ,最大 65535
binary 二進制形式,對應 char
barbinary 二進制形式,對應 varchar
text 存儲大長度字符
blob 二進制形式存儲,對應 text
技巧: text 很長,能夠使用 substring(column,length) 來截取, 在 order by 中一樣也適用
4.日期
date YYYY-MM-DD
time HH:MM:SS
year YYYY
datetime YYYY-MM-DD HH:MM:SS 1001年 - 9999年 使用 8 個字節存儲
timestamp 1970年 - 2038 年
5. 枚舉
enum
6.位
bit
set
小記:
對於IPv4 人們常用 varchar(15) 來存儲,然而,它其實是32位無符號的整數,不是字符串,用小數點將地址分開,只是爲了讓人閱讀,因此應用用無符號整數存儲ip地址,能夠使用 inet_aton() 與inet_ntoa()函數來將其轉換