MySQLのTIMESTAMPを全面的に使用してみませんか?
質問
Webアプリケーションをユーザーごとにタイムゾーン間で変換する必要がある場合、すべての日付/時刻フィールドに全面的にTIMESTAMPを使用してください。 TIMESTAMP値はUTCで保存され、取得時に接続用に設定されたタイムゾーンに変換されることを考慮してください。
IRCでこの質問をし、MySQLのドキュメントを読み、Googleを広範囲に検索し、同僚に尋ねましたが、TIMESTAMPを使用しない説得力のある理由をまだ見つけていません。
注:TIMESTAMPの範囲は1970〜2038に制限されています。私の場合、それは問題になりません。また、MySQLでPHPを使用しています。
解決
DATETIMEは、データで使用する任意の日付および時刻用です。
TIMESTAMPは、時刻を自動的に更新する場合に使用します。行がいつ挿入/更新されたかを知りたい場合は、TIMESTAMPを使用します。
また、TIMESTAMPはUTCでのみ保存されることに注意してください。クエリの一部として送信される前に、サーバーのローカルタイムゾーンに変換されます。
あなたの場合、DATETIMEを使用したほうが良いでしょう。 UTCが心配な場合は、問題ありません。現地時間を使用するのではなく、UTCで日付を作成するだけです。 UTC_TIMESTAMP を使用します。
他のヒント
あなたの答えはここにあると思います:
TIMESTAMPの範囲は1970〜2038に制限されていることを理解しています。私の場合、これは問題になりません。
特にデータベーススキーマに関しては、プロジェクトの寿命について 、慎重に推測します。データベースは、データベースを使用していたアプリケーションが消えた後も長期間使用され続ける傾向があります。
Randalphoの答えは多くの事実で間違っています!
タイムスタンプは、作成時または更新時に自動的に更新する必要はありません。
また、タイムスタンプは、サーバーの時刻ではなく、クライアントのローカル時刻に変換されます。
datetimeについては、MySQLのドキュメントをご覧ください。