多くのデータベースで、タイプを使用して時間の値を格納しているのを見ました。私の質問は、タイプを使用して値を格納TIMESTAMP
しないのはなぜですか。そうすれば、時間の値を簡単に取得できるのでしょうか。INT
$date->getTimestamp()
6 に答える
日付を数値ではなく日付として扱う場合、期間(DATE + 1MONTH-1HOUR)を追加するなどのきちんとした処理を実行できるためです。TIMESTAMP
、DATETIME
なども日付用に最適化されており、ネイティブ検証を行います。
多くの理由が考えられますが、最も明白な(そして簡単な理由は)データベースが値が(日付/時刻に関連する)ことを知っていることですが、はそうではありません。TIMESTAMP
INT
これにはいくつかの結果があります。たとえば、Mysqlはタイムゾーンを認識し、TIMESTAMP
UTCに自動的に協調します。つまり、データの意味が明確であるため、データははるかに具体的です。INT
自分で処理する必要のあるタイプの場合、データベースとの相対関係はなくなります。
次の大きな違いは、自動初期化と更新です。つまり、行が挿入または変更された場合、列にはTIMESTAMP
現在の時刻が「スタンプ」されます。
これらのタイプの間にも他にもいくつかの違いがあり、そのほとんどはデータ/時間関数に関連しています。私はあなたが掘り下げることをお勧めします:
異なる数値タイプ(タイムスタンプなど)がある理由は、データの整合性を提供するためです。
データの整合性により、朝食に持っていたワッフルの数を誤って入れないようにしています:)
無効なタイムスタンプを入力しようとすると、MySQLはエラーをスローし、不正なデータを入力できないようにします。
プレーンな数値の代わりにタイムスタンプを使用すると、データベースでさらに多くのことを実行できます。曜日ごとのクエリ、月ごとのグループ化、間隔の決定など...
intはわずか4バイト、datetimeは8バイトであるため、可能な値は少なくなります。特にphpの場合、最小日付が1901-12-13、最大日付が2038-01-19のUnixタイムスタンプを取得しています。これは本質的に戻って、Y2K問題につながるのと同じ種類の決定を下すことです。あなたが大丈夫であるはずだとあなたが生きることができると仮定しますが、非Unixベースのホストはどうですか?
データの実際の表現を公開する必要がないためです。なんで?
柔軟性(データの内部表現はいつでも変更される可能性があり、ユーザーはそれに依存しません)。
信頼性(データベースは、データが何であるかを知っている場合、データの整合性をチェックする場合があります)
読みやすさ(タイムスタンプを整数として扱う理由はありません。レコードの意味を示します)