MySQL 保存日期,用哪種數據類型合適?字符串? date? datetime?timestamp?還是 int?


一. 字符串

首先是不推薦字符串的, 原因如下:

1. 使用字符串存儲日期,第一個顯而易見的問題就是無法使用 MySQL 中提供的日期函數,這會為很多查詢帶來不便
2. 使用字符串存儲日期的第二個問題就是占用空間較大, 例如存儲一個標准"yyyy-MM-dd HH:mm:ss"格式的時間:

二. timestamp

先來看看timestamp的特點:

1. timestamp存儲范圍則介於 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC 之間
2. timestamp自帶時區屬性, TIMESTAMP 類型字段的值會隨着服務器時區的變化而變化,自動換算成相應的時間
3. 數據庫中存儲的形式為: yyyy-MM-dd HH:mm:ss
4. 對應Java類型: java.sql.Timestamp

故, 如果你的業務需要對應不同的國家時區,那么類型 TIMESTAMP 是一種不錯的選擇, 但它最大的弊病是他的存儲范圍只到2038年..

三. datetime

看看datetime的特點:

1. 數據庫中存儲的形式為:yyyy-MM-dd HH:mm:ss, 這個和timestamp存儲形式一樣
2. datetime存儲范圍介於 1000-01-01 00:00:00 到 9999-12-31 23:59:59 之間, 相比timestamp, 其可存儲范圍更大
3. datetime不具備時區屬性, 時區問題也並非一定要在數據庫中解決,也可以在前端或者服務端用代碼處理下
4. 對應Java類型: java.util.Date 或者 jdk8的LocalDateTime

一般存儲日期時間格式的字段, 建議使用datetime

四. date

看看date的特點:

1. 數據庫中存儲的形式為:yyyy-MM-dd
2. date存儲范圍介於 1000-01-01 到 9999-12-31 之間
3. 對應Java類型: java.util.Date(可通過@JsonFormat指定特定格式), 或者 jdk8的LocalDate

一般存儲日期格式的字段(如: 生日), 建議使用date

五. int / bigint

有人存時間戳,存一個 int(11) 類型的數值(或者bigint(19)類型數值, 可精確到毫秒),用一個時間戳來表示時間

1. 其優點是: 當我們需要進行日期排序以及按照日期范圍查詢的時候,就變成了普通的數字比較了,那么效率肯定是杠杠滴
2. 但是缺點也顯而易見: 可讀性太差

 

好啦, 以上就是MySQL中常用的一些存儲時間的類型, 個人還是比較建議使用 datetime 和 date 類型 !

這里有篇博文寫的不錯, 強烈推薦: https://mp.weixin.qq.com/s/V301YKTEmZy09QVRhKHLpg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM