データタイプを日時またはタイムスタンプとして指定する方法がわかりません。両方が必要ですが、異なるイベントで必要です。私のウェブサイトは世界中で製品とサービスを販売しており、ユーザーがログインするためのアカウントシステムも持っています。以下を明確にしてください:
アカウントに最後にログインした時間:タイムスタンプ?
MySQL タイムスタンプ :
[〜#〜] utc [〜#〜] に格納されます
これらはストレージでUTCに変換され、取得時にタイムゾーンに変換されます。 タイムゾーン設定の変更 の場合、取得された値も変更されます。
自動的に初期化および更新できます
デフォルト値や自動更新値を_CURRENT_TIMESTAMP
_に設定できます
_1970-01-01 00:00:01 UTC
_から_2038-01-19 03:14:07 UTC
_までの範囲
一方、MySQL datetime :
保存するのは、™を取得することです。
_1000-01-01 00:00:00
_から_9999-12-31 23:59:59
_までの範囲
範囲外の値も機能しますが、範囲内の値のみが機能することが保証されています。
日または月がゼロの日付を保存できます。
これは、誕生日を保存するMySQLの方法です。 TIMESTAMP
を使用してこれを行うことはできません。ただし、_0000-00-00
_のゼロ値は例外です。
ALLOW_INVALID_DATES モードでは、必要に応じて無効な日付を保存できます。
場合によっては、デフォルト値をNOW()
に設定できますが、日付を自動的に初期化および更新するためのより自然で好ましい方法はTIMESTAMP
です。
もちろん、DATE
とTIME
もあり、DATETIME
と同じように機能しますが、DATE
は時間を考慮せず、TIME
は日付を考慮しません。 4つのデータ型はすべて、幅広い 日付と時刻の関数 で完全に機能しますが、データ型を混在させる場合は、 変換効果 に注意する必要があります。
さて、あなたの質問に:どこでもDATETIME
を使うべきです。技術的な理由ではありませんが、MySQLがどのように機能するかはまだ不明なので、DATETIME
の方が簡単です。これは、保存する前にPHP)で現在のタイムスタンプを計算する必要があることを意味します。これは次のように簡単です。
_$mysqldate = date("Y-m-d H:i:s");
_
PHPの 日付関数 は次のように機能します。
_string date ( string $format [, int $timestamp = time() ] )
_
_"Y-m-d H:i:s"
_形式はMySQLと互換性がある形式であり、2番目のパラメーターを空のままにしておくと、date()
がtime()
を呼び出して現在の NIXタイムスタンプ を取得します。
TIMESTAMP
の代わりにDATETIME
を使用すると、MySQLの付加価値があり、現在のタイムスタンプを決定する責任があり、挿入/更新時にフィールドをスキップできます。しかし、すでにクエリを送信していて、PHP)の現在のタイムスタンプを取得するコードは最小限であるため、DATETIME
ですべてを安全に実行できます。
PHPタイムスタンプをデータベースに保存するための実際のコードについては、 PHP Data Objects を確認する必要があります。それでも不明な場合は、質問してください StackOverflow 代わりに ほぼ1.5kに関連する質問 があります。質問する前に必ず確認してください。ヒント、 準備されたステートメント はすばらしいです子供たちはそれを行います。
主な違い:
TIMESTAMPは、レコードへの変更を追跡し、レコードが変更されるたびに更新するために使用されます。 DATETIMEは、レコードの変更の影響を受けない特定の静的な値を格納するために使用されます。
TIMESTAMPは、異なるTIME ZONE関連の設定の影響も受けます。 DATETIMEは定数です。
TIMESTAMPは、現在のタイムゾーンを内部的にUTCに変換して保存し、取得時に現在のタイムゾーンに変換し直しました。 DATETIMEはこれを行うことができません。
TIMESTAMPでサポートされている範囲: '1970-01-01 00:00:01' UTCから '2038-01-19 03:14:07' UTC DATETIMEでサポートされている範囲: '1000-01-01 00:00:00'から '9999 -12-31 23:59:59 ′