91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

記錄總結,MySQL中的時間字段的幾種數據類型比較

發布時間:2020-06-19 10:05:06 來源:網絡 閱讀:819 作者:老K8 欄目:MySQL數據庫

序言

以前腦海里就一念頭總以為啥時間都用int存儲,最近在項目開發時,頻繁見到datetime類型,對于MySQL數據庫中的有關時間的字段該選用何種類型,引發了一些爭論。所以做了一些簡單的研究,看了一些blog和官方文檔。最后做出一個自己的總結。

類型比較

int

INT類型一般用于存儲Unix時間戳。使用一個簡單的 INT 列保存 Unix 時間是最普通的方法。使用 INT,你可以確保你要保存的數字可以快速、可靠地插入到表中。

  • 占用4個字節
  • 建立索引之后,查詢速度快
  • 條件范圍搜索可以使用使用between
  • 不能使用MySQL提供的時間函數

如果只是存儲 Unix 時間戳(并且在它的合法日期范圍內),而且不打算在它上面使用任何基于日期的查詢,我覺得使用 INT 是可以的。它執行簡單數值比較查詢時非常快,因為只是在處理簡單的數字。

結論:適合需要進行大量時間范圍查詢的數據表,不支持在此字段上進行MySQL時間函數的運算,比如from_unixtime

TIMESTAMP和DATETIME

Datetime 和 Timestamp 都保存日期和時間信息,同時,使用人類可讀的日期形式,如 “2018-01-01”。

TIMESTAMP: A four-byte integer representing seconds UTC since the epoch (‘1970-01-01 00:00:00’ UTC)

TIMESTAMP:一個四字節的整數,從1970-01-01 00:00:00開始算起。

Timestamp 和 Datetime 的核心不同點主要在于 MySQL在內部如何表示這些信息:兩種都以二進制而非字符串形式存儲,但在表示日期/時間部分時 Timestamp (4 字節) 比 Datetime (5字節,從MySQL 5.6.4版本起,之前為8個字節) 少使用 1 字節。當保存毫秒部分時兩種都使用額外的空間 (1到3 字節)。

非分數部分的DATETIME編碼(5.6.4版本之后):

1 bit sign (1= non-negative, 0= negative)
17 bits year*13+month (year 0-9999, month 0-12)
5 bits day (0-31)
5 bits hour (0-23)
6 bits minute (0-59)
6 bits second (0-59)


40 bits = 5 bytes

Timestamp 節省的 1 字節是有代價的:你只能存儲從 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’ 之間的時間。而 Datetime 允許你存儲從 ‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’ 之間的任何時間。

另一個重要的差別是MySQL使用服務器的時區轉換Timestamp值到它的 UTC 等價值再保存。當獲取值是它會再次進行時區轉換,所以你得回了你“原始的”日期/時間值。Datetime 列不會被數據庫改變。無論時區怎樣配置,每次都會保存和獲取到同樣的值。

在5.6版本之后,datetime開始可以使用current time作為默認值,所以不再有timestamp比datetime更適合作為需要隨插入和更新來變更時間的類型的說法。

結論:Datetime 是大多數場景下的最佳選擇,理由是

  • 無需任何轉換即是人類可讀的。
  • 不會因為時區變換產生問題。
  • 只比它的對手們多用 1 字節
  • 支持更大的日期范圍(從 1000 年到 9999 年)

總結

沒有完美的數據類型,只要最合適的數據類型。這么多類型同時存在一定是有其道理的,了解清楚了不同類型的差異,就能選擇最合適的類型。

參考:

  1. 解析MySQL中存儲時間日期類型的選擇問題
  2. Date and Time Data Type Representation
  3. MySQL中你應該使用什么數據類型表示時間?
  4. MySQL中的時間字段的幾種數據類型比較
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沛县| 谢通门县| 洛宁县| 盖州市| 楚雄市| 甘德县| 滦南县| 怀来县| 赤城县| 宜君县| 兴仁县| 陕西省| 安徽省| 深水埗区| 榆林市| 万载县| 嵊州市| 两当县| 慈溪市| 和田市| 扬州市| 汉阴县| 张北县| 玉环县| 茶陵县| 金沙县| 昭苏县| 敖汉旗| 通化市| 襄城县| 湘潭县| 利川市| 普格县| 九龙坡区| 秦安县| 白河县| 八宿县| 南充市| 会同县| 合肥市| 红河县|