1. ホーム
  2. mysql

datetimeとtimestampの使い分けについて [重複]。

2023-09-04 16:29:31

質問

検索してみたのですが、明確な回答がありません(特に後者)。どのような場合にdatetimeやtimestampを使うべきなのでしょうか?

どのように解決するのですか?

MS SQL Server を使用していると仮定して(そうでない場合は の更新を参照してください。 ):

テーブルが持つことができるタイムスタンプ カラムを持つことができます。タイムスタンプ カラムの値は、タイムスタンプカラムを含む行が タイムスタンプ列の値は、タイムスタンプ列を含む行が挿入または更新される 更新される。この特性 この特性により、タイムスタンプ・カラムは キー、特に主キーの候補としては不適切です。 キーに適していません。行を更新すると タイムスタンプの値を変更し、それによって キーの値を変更します。もし、そのカラム が主キーである場合、古いキー値 は無効となり、その値を参照する外部キー を参照する外部キーは無効となる。 は無効になる。テーブルが動的カーソルで参照される場合 動的カーソルで参照されている場合、すべての更新は 更新はカーソル内の行の位置を変更します。 行の位置を変更する。もしカラムが がインデックスキーである場合、データ行に対する全ての更新は データ行の更新は インデックスの更新も発生します。

に関する情報 MSDN

もし、ある行に対して日付や時刻の情報を保存し、その日付や時刻が変化しないようにする必要がある場合はDateTimeを、そうでない場合はTimestampを使用してください。

また、注意してください。 MS SQL Server のタイムスタンプフィールドは日付でも時間でもなく、データが変更されたときの相対的な順序を表すバイナリ表現です。

更新

MySQLと言うことでアップデートしました。

TIMESTAMP 値は、現在のタイムゾーンから UTC に変換されます。 現在のタイムゾーンからUTCに変換され 保存され、UTCから元のタイムゾーンに変換されます。 から現在のタイムゾーンに戻されます。 に変換されます。(この現象は TIMESTAMPデータ型にのみ発生し、DATETIMEなどの他のデータ型には発生しない)。 DATETIMEなどの他の型では発生しません)。

引用元 MySQL リファレンス

さらに注目すべきは

<ブロッククオート

TIMESTAMP 値を保存した後 タイムゾーンを変更して取得した場合 を取得した場合、取得した値は保存した値とは は保存した値とは異なります。

したがって、タイムゾーンをまたいでアプリケーションを使用していて、個々のユーザーの設定を反映した日付/時刻が必要な場合は、Timestampを使用します。タイムゾーンに関係なく一貫性が必要な場合は、Datetimeを使用します。