3

重複の可能性:
MySQLのさまざまな日付/時刻フィールドタイプの長所と短所は何ですか?

多くのデータベースで、タイプを使用して時間の値を格納しているのを見ました。私の質問は、タイプを使用して値を格納TIMESTAMPしないのはなぜですか。そうすれば、時間の値を簡単に取得できるのでしょうか。INT$date->getTimestamp()

4

6 に答える 6

7

日付を数値ではなく日付として扱う場合、期間(DATE + 1MONTH-1HOUR)を追加するなどのきちんとした処理を実行できるためです。TIMESTAMPDATETIMEなども日付用に最適化されており、ネイティブ検証を行います。

于 2013-01-06T16:22:32.820 に答える
2

多くの理由が考えられますが、最も明白な(そして簡単な理由は)データベースが値が(日付/時刻に関連する)ことを知っていることですが、はそうではありません。TIMESTAMPINT

これにはいくつかの結果があります。たとえば、Mysqlはタイムゾーンを認識し、TIMESTAMPUTCに自動的に協調します。つまり、データの意味が明確であるため、データははるかに具体的です。INT自分で処理する必要のあるタイプの場合、データベースとの相対関係はなくなります。

次の大きな違いは、自動初期化と更新です。つまり、行が挿入または変更された場合、列にはTIMESTAMP現在の時刻が「スタンプ」されます。

これらのタイプの間にも他にもいくつかの違いがあり、そのほとんどはデータ/時間関数に関連しています。私はあなたが掘り下げることをお勧めします:

于 2013-01-06T16:25:17.037 に答える
1

異なる数値タイプ(タイムスタンプなど)がある理由は、データの整合性を提供するためです。

データの整合性により、朝食に持っていたワッフルの数を誤って入れないようにしています:)

無効なタイムスタンプを入力しようとすると、MySQLはエラーをスローし、不正なデータを入力できないようにします。

于 2013-01-06T16:25:31.180 に答える
1

プレーンな数値の代わりにタイムスタンプを使用すると、データベースでさらに多くのことを実行できます。曜日ごとのクエリ、月ごとのグループ化、間隔の決定など...

于 2013-01-06T16:23:37.983 に答える
1

intはわずか4バイト、datetimeは8バイトであるため、可能な値は少なくなります。特にphpの場合、最小日付が1901-12-13、最大日付が2038-01-19のUnixタイムスタンプを取得しています。これは本質的に戻って、Y2K問題につながるのと同じ種類の決定を下すことです。あなたが大丈夫であるはずだとあなたが生きることができると仮定しますが、非Unixベースのホストはどうですか?

于 2013-01-06T16:24:14.033 に答える
1

データの実際の表現を公開する必要がないためです。なんで?

  • 柔軟性(データの内部表現はいつでも変更される可能性があり、ユーザーはそれに依存しません)。

  • 信頼性(データベースは、データが何であるかを知っている場合、データの整合性をチェックする場合があります)

  • 読みやすさ(タイムスタンプを整数として扱う理由はありません。レコードの意味を示します)

于 2013-01-06T16:24:46.257 に答える