おそらく多くのコーダーがこの質問をしたいと思っています。これらの MySQL 時間形式のそれぞれの利点は何ですか。そして、あなたのアプリでそれを使用することを好みます。
私にとっては、Unix タイムスタンプを使用しています。おそらく、レコードを変換して並べ替えるのが簡単だと思うからです。また、DATETIME のことを試したことがないからです。とにかく誰かが私が間違っていると言ったら、私は考えを変える準備ができています.
ありがとう
おそらく多くのコーダーがこの質問をしたいと思っています。これらの MySQL 時間形式のそれぞれの利点は何ですか。そして、あなたのアプリでそれを使用することを好みます。
私にとっては、Unix タイムスタンプを使用しています。おそらく、レコードを変換して並べ替えるのが簡単だと思うからです。また、DATETIME のことを試したことがないからです。とにかく誰かが私が間違っていると言ったら、私は考えを変える準備ができています.
ありがとう
タイムスタンプ(PHP のものと MySQL のものの両方)は 32 ビット(つまり 4 バイト)の整数を使用して保存されます。つまり、1970 年から 2038 年までの日付範囲に限定されます。
DATETIME
その制限はありません-しかし、より多くのバイトを使用して保存されます(私が間違っていなければ8バイト)
その後、PHP で見られるタイムスタンプと MySQL で見られるタイムスタンプの保存の間:
また、MySQLTIMESTAMP
とDATETIME
データ型の間の詳細については、 10.3.1 を参照してください。DATETIME、DATE、および TIMESTAMP 型
他の人が言ったように、タイムスタンプはより狭い範囲の日時 (1970 年から 2038 年まで) を表すことができます。ただし、タイムスタンプは Unix エポック (1970-01-01 00:00:00 UTC) からの秒数を測定するため、タイム ゾーンに依存しませんが、DATETIME はタイム ゾーンなしで日付と時刻を格納します。つまり、タイムスタンプは特定の時点を明確に参照しますが、DATETIME が参照する正確な時点にはタイム ゾーンが必要です (これは DATETIME フィールドには格納されません)。これが問題になる理由を理解するために、タイム ゾーンを変更するとどうなるかを考えてみましょう。
datetime 2010-03-27 12:00 UTC を保存したいとしましょう。これを保存し、タイムスタンプまたは DATETIME を使用して取得すると、通常は違いがないように見えます。ただし、ローカル タイム ゾーンが UTC+01 になるようにサーバーが変更された場合、datetime を取り出すと 2 つの異なる結果が得られます。
フィールドを DATETIME に設定すると、タイム ゾーンの変更にもかかわらず、日時が 2010-03-27 12:00 としてレポートされます。フィールドをタイムスタンプに設定すると、日付は 2010-03-27 11:00 としてレポートされます。これは、どちらのデータ型でも問題ではありません。格納される情報がわずかに異なるためです。
それは本当に依存します。一方が他方を克服する 2 つの例を示します。
データベースにユーザー セッションを保存する場合は、DATETIME よりもタイムスタンプの方が適しています。セッションの作成時刻 (タイムスタンプ形式) は、高速な行の取得 (インデックスを使用) に使用されます。
たとえば、テーブルは次のよう
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
になります。最初の 2 つの列にインデックスを設定すると、クエリが大幅に高速化されます。フィールドの値のタイプが DATETIME の場合は、session_create_time
さらに時間がかかる可能性があります。ユーザーがページをリクエストするたびにセッション クエリが実行されることを考慮してください。そのため、効率が重要です。
ユーザーの生年月日または柔軟な時間範囲を必要とする一部の履歴イベントを保存する場合は、DATETIME が Timestamp よりも適しています。
1970 年 1 月 1 日より前の記録をデジタル化しない限り、私は UNIX エポックが好きです。好みの問題ですが、複数の言語を使用する場合は、符号なしの整数の方が扱いが簡単です。
エポックは 1970 年 1 月 1 日に始まることを覚えておいてください。多くの企業は、それ以前に、それ以上ではないにしても、何十年もビジネスを続けていました。