- 不要用字符串存儲日期
- DateTime和TimeStamp之間的選擇
2.1 DateTime沒有時區(qū)信息
2.2 DateTime類型耗費更大的空間- 數(shù)值型時間戳
- 總結(jié)
1. 不要用字符串存儲日期
字符串存儲存在的問題:
- 空間,字符串占用更大的空間
- 效率唧喉,字符串存儲日期效率較低(逐個字符比對)捣卤,無法用日期相關的 API 進行計算和比較。
2. DateTime和TimeStamp之間的選擇
通常首選Timestamp
2.1 DateTime沒有時區(qū)信息
DateTime 類型是沒有時區(qū)信息的(時區(qū)無關)欣喧,DateTime 類型保存的時間都是當前會話所設置的時區(qū)對應的時間腌零。所以當時區(qū)更換之后,比如服務器更換地址或者更換客戶端連接時區(qū)設置的話唆阿,就會導致從數(shù)據(jù)庫中讀出的時間錯誤益涧。
Timestamp 和時區(qū)有關。Timestamp 類型字段的值會隨著服務器時區(qū)的變化而變化驯鳖,自動換算成相應的時間闲询,也就是說在不同時區(qū)久免,查詢到同一個條記錄此字段的值會不一樣。
一些關于MySQL時區(qū)設置一個常用sql命令
# 查看當前會話時區(qū)
SELECT @@session.time_zone;
# 設置當前會話時區(qū)
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
# 數(shù)據(jù)庫全局時區(qū)設置
SELECT @@global.time_zone;
# 設置全局時區(qū)
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
2.2 DateTime類型耗費更大的空間
Timestamp 只需要使用 4 個字節(jié)的存儲空間扭弧,但是 DateTime 需要耗費 8 個字節(jié)的存儲空間阎姥。但是,這樣同樣造成了一個問題鸽捻,Timestamp 表示的時間范圍更小呼巴。
- DateTime :1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
- Timestamp: 1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
3. 數(shù)值型時間戳
有時也會用 int 或者 bigint 類型的數(shù)值也就是時間戳來表示時間。
這種存儲方式的具有 Timestamp 類型的所具有一些優(yōu)點御蒲,并且使用它的進行日期排序以及對比等操作的效率會更高衣赶,跨系統(tǒng)也很方便,畢竟只是存放的數(shù)值厚满。缺點也很明顯府瞄,就是數(shù)據(jù)的可讀性太差了,你無法直觀的看到具體時間碘箍。