MySQL の DATETIME と TIMESTAMP

Mehvish Ashiq 2023年1月30日
  1. DATETIMETIMESTAMP の類似点
  2. DATETIMETIMESTAMP の違い
  3. MySQL での DATETIMETIMESTAMP の使用を理解するための例
  4. まとめ
MySQL の DATETIME と TIMESTAMP

DATETIMETIMESTAMP は、日付と時刻の部分を含む必要がある値を格納するために使用できる 2つの異なるデータ型です。

この記事では、データベースに格納される形式と、各データ型に必要なメモリについて学習します。また、両方のデータ型の類似点と相違点を確認し、例を使用して理解しようとします。

DATETIMETIMESTAMP の類似点

DATETIMETIMESTAMP には、以下に示すいくつかの類似点があります。

  • どちらも同じタイプのデータを格納し、2つの部分(日付と時刻)があります。
  • クエリを実行するときは、どちらも同じ形式です。
  • データベースに保存する形式は同じです(YYYY-MM-DD hh:mm:ss)。
  • どちらも、小数秒の精度のために追加のバイトが必要です。
  • レコードが更新されるたびに、両方が現在の日付と時刻でデータを変更できます。

DATETIMETIMESTAMP の違い

DATETIMETIMESTAMP には次の違いがあります。

  • DATETIMETIMESTAMP には、それぞれ 5 バイトと 4 バイトが必要です。
  • TIMESTAMP はタイムゾーンの影響を受けますが、DATETIME は一定のままです。
  • DATETIME および TIMESTAMP でサポートされる範囲は、'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 を使用します。

このシナリオを少し変更してみましょう。現在、さまざまな国に 10 のコーヒーショップがあり、それぞれの国にタイムゾーンがあります。顧客にも請求書が届きますが、顧客のタイムゾーンに応じて日付と時刻を表示するにはどうすればよいですか。

ここでは、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 の日時とタイムスタンプ-日付パート a

次に、以下のコードを実行して、その出力を確認します。

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

出力:

mysql の日時とタイムスタンプ-日付パート 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