MySQL 中的 DATETIME 與 TIMESTAMP 的比較

Mehvish Ashiq 2023年1月30日
  1. DATETIMETIMESTAMP 的相似之處
  2. DATETIMETIMESTAMP 的區別
  3. 瞭解 MySQL 中 DATETIMETIMESTAMP 使用的示例
  4. まとめ
MySQL 中的 DATETIME 與 TIMESTAMP 的比較

DATETIMETIMESTAMP 是兩種不同的資料型別,可用於儲存必須包含日期和時間部分的值。

在本文中,我們將瞭解它在資料庫中的儲存格式以及每種資料型別所需的記憶體。我們還將檢視兩種資料型別的異同,並嘗試通過示例來理解。

DATETIMETIMESTAMP 的相似之處

DATETIMETIMESTAMP 有一些相似之處,如下所示:

  • 兩者都儲存相同型別的資料,具有兩部分(日期和時間)。
  • 兩者在查詢時具有相同的格式。
  • 儲存在資料庫中的格式相同(YYYY-MM-DD hh:mm:ss)。
  • 兩者都需要額外的位元組來實現小數秒精度。
  • 每當更新記錄時,兩者都可以使用當前日期和時間更改資料。

DATETIMETIMESTAMP 的區別

DATETIMETIMESTAMP 有以下區別:

  • DATETIMETIMESTAMP 分別需要 5 個位元組和 4 個位元組。
  • TIMESTAMP 受時區影響,但 DATETIME 保持不變。
  • DATETIMETIMESTAMP 支援的範圍是 '1000-01-01 00:00:00''9999-12-31 23:59:59''1970-01-01 00:00:01'UTC'2038-01-19 03:14:07' UTC
  • DATETIME 不能被索引,而 TIMESTAMP 可以。
  • 帶有 TIMESTAMP 的查詢將被快取,但 DATETIME 不是這種情況。

瞭解 MySQL 中 DATETIMETIMESTAMP 使用的示例

假設你在你的國家/地區經營一家咖啡店。每個客戶在支付賬單後都會收到一張發票​​。

除其他詳細資訊外,此發票還有日期和時間。由於你僅在你的所有客戶都在同一時區的國家/地區經營商店,因此你將使用 DATETIME

讓我們稍微改變一下這個場景;你現在在不同的國家有十家咖啡店,每個國家都有自己的時區。客戶也會在那裡收到發票,但是如何根據客戶的時區顯示日期和時間。

在這裡你將使用 TIMESTAMP。為什麼?因為 TIMESTAMP 受時區影響,也就是說 TIMESTAMP 的值會從當前時區(伺服器時間)轉換為 UTC(通用時區)進行儲存,再返回到當前時區(伺服器時間) ) 關於檢索。

示例程式碼:

請在你的 MySQL 中執行以下程式碼(我們在本教程中使用 MySQL 8.0.27)並檢視程式碼後給出的輸出。

#create schema
CREATE SCHEMA db_practice_datetime_timestamp;

#create table
CREATE TABLE practice_datetime_and_timestamp (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    DATE_TIME DATETIME,
    TIME_STAMP TIMESTAMP
    );
#insert data   
INSERT INTO practice_datetime_and_timestamp(TIME_STAMP,DATE_TIME)
VALUES(NOW(),NOW());

#read data
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;

輸出:

mysql 中的 datetime vs timestamp - date part a

現在,執行下面給出的程式碼並檢視其輸出。

SET time_zone = '-05:00';
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;

輸出:

mysql 中的 datetime 與時間戳-日期部分 b

你可能已經注意到 TIME_STAMP 列的時間已更改,但 DATE_TIME 的資料保持不變。

まとめ

在本次討論中,我們得出結論,DATETIMETIMESTAMP 根據你的需要儲存相同的資料。如果你希望你的資料受時區影響,請選擇 TIMESTAMP。否則,最好使用 DATETIME

作者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook