整數類型,tinyint、smallint、mediumint、int、bigint
如果需要保存整數(不含小數),可以選擇tinyint、smallint、mediumint、int、bigint,它們的范圍如下圖:
另外,一些小知識:
- 整形的計算是使用64位的bigint進行計算的
- 如果為整形指定長度,並不會限制其大小范圍,只是影響顯示,其存儲與計算與其它長度的整形一致
實數類型,float、double
如果僅為了存儲,不作精確的計算,可用float和double,它們的計算結果並不是精確的,只是近似計算,是CPU直接的原生浮點計算,效率比較高,但不精確。
如果需要精確計算,則可以用decimal,但存儲成本和計算成本比float和double高。
字符串類型,varhcar、char
它們的主要區別在於varhcar是變長的,char是定長的。
- 在記錄的字符串長度不一,或最大的字符串長度大於字符串平均長度時,使用varchar非常合適
- 記錄可知的定長的字符串,用char就合適了
時間類型,datetime、timestamp
- datetime將時間數據
年月日時分秒
內部存儲為整數類型,它需要8字節的空間。 - timestamp記錄GTM 2017-01-01至今的秒數,使用4字節的空間。它的缺點是時間范圍只能到2038年,另外,它依賴與時區,時區的變更會使時間變得不同。
timestamp更小,但有缺點,主要取決於這些缺點是否影響到你的程序。
另外,使用timestamp需注意一點是,我在使用工具創建一個表時,創建時沒有特別設置“默認值”、“非空”、“更新”等屬性,但timestamp會設置“默認值”為“CURRENT_TIMESTAMP”,“非空”,和“自動更新”。(究竟是工具的行為還是MySQL的行為我沒有考究,大家引起注意這點,不要因此導致業務異常):