幾乎每次數據庫建模的時候,都會遇到時間類型數據存儲的問題。
mysql存儲時間通常選擇這四種類型:datetime、timestamp、int和bigint四種方式,到底使用什么類型,需要看具體的業務。
我們分別對這四種類型進行討論。
1、datetime
這個類型可以存儲8字節,表示從1000到9999年之間的數據。這個類型可以為空值,也可以自定義值,默認的初始值是“0000-00-00 00:00:00”。
這種類型存儲的存儲的優點是數據可讀性強,不需要函數做轉換。
2、timestamp
這個類型的存儲長度是4個字節,表示的范圍是:'1970-01-01 00:00:01'-'2038-01-19 03:14:07’,可以為空值,也可以自定義值。需要注意的是這個字段創建時如果加上 “on update current_timestamp”時,該字段插入值時,會自動變為當前的系統時間。
3、int
這個類型的存儲長度是4字節,一般用來存儲linux時間戳的形式,存儲精度為秒。表示最大是 date('Y-m-d H:i:s', 4294967295) 最大到 2106-02-07 14:28:15,可以為空值,但是業務邏輯設計時盡量使用非空值。它的優點是數值型存儲,節省空間。但是可讀性差。另外,如果業務上經常需要按照時間進行排列或者查詢的話,盡量使用int類型。
4、bigint
這個類型的存儲長度是8個字節,從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。適合業務精確的時間存儲,它的存儲精度為毫秒。優缺點請參考int。
另外,mysql中的時間存儲還有以下類型:
YEAR :字節數為1,取值范圍為“1901——2155”。
DATE,字節數為4,取值范圍為“1000-01-01——9999-12-31”。
TIME,字節數為3,取值范圍為“-838:59:59——838:59:59”。
在實際的數據庫建模過程中,用的比較少一些。
綜上,我們認為時間的存儲需要根據具體的業務場景來定。一般來說,int類型使用較多,一方面查詢效率高,另一方面可以顯示時間的方式比較靈活,一般語言都提供轉化的函數,如大家熟知的php中的date()函數。
