web-dev-qa-db-ja.com

DATE、TIME、DATETIME、およびTIMESTAMPタイプの違い

Mysqlにtimedateの両方を保存する必要があります。そのため、NOW()関数を使用しました。しかし、type columnim phpmyadminに何を使うべきかわかりません。 NOW()は、次のように時刻と日付の両方を返すことに注意してください。

_2014-11-11 12:45:34
_

これが解決策です。日付と時刻(_2014-11-11_と_12:45:34_)を分離するセパレータを使用し、それらをDATE型とTIME型に個別に格納できます。または、1つの列に両方を格納するためにVARCHAR型を使用できます。しかし、これらの方法は標準ではないと思います。日付と時刻の両方を保存するための標準タイプは何ですか?

ここに私のクエリがあります:(NOW()関数が機能しない理由もわかりません)

_INSERT INTO table (timedate) VALUES (NOW())
_
22
Shafizadeh

DATE:日付部分はあるが時間部分はない値に使用されます。 MySQLは、DATE値をYYYY-MM-DD形式で取得して表示します。サポートされる範囲は1000-01-01から9999-12-31

DATETIME:日付と時刻の両方の部分を含む値に使用されます。 MySQLは、DATETIME値をYYYY-MM-DD HH:MM:SS形式で取得して表示します。サポートされる範囲は1000-01-01 00:00:00から9999-12-31 23:59:59

TIMESTAMP:日付と時刻の両方の部分を含む値に使用されます。 TIMESTAMPの範囲は1970-01-01 00:00:01 UTCから2038-01-19 03:14:07 UTC。

TIME:その値はHH:MM:SS形式(またはHHH:MM:SS大きな時間の値の形式)。 TIME値の範囲は-838:59:59から838:59:59。 TIMEタイプは時刻(24時間未満でなければならない)だけでなく、経過時間または2つのイベント間の時間間隔(これよりもはるかに大きい場合もある) 24時間、またはマイナス)。

60
Saty

[〜#〜] datetime [〜#〜][〜#〜] timestamp [〜#〜]の違いについては、少し異なる視点があります。 [〜#〜] datetime [〜#〜]は、特定のタイムゾーンへの参照なしで日時のリテラル値を格納します。したがって、[〜#〜] datetime [〜#〜]列を '2019-01-16 12:15:00'などの値に設定して、最後の誕生日がいつ発生したかを正確に示すことができます。これは東部標準時でしたか?太平洋標準時?知るか? [〜#〜] datetime [〜#〜]列をNOW()などの値に設定すると、サーバーの現在のタイムゾーンが機能するようになります。格納される値は、有効な現在のタイムゾーンを使用した現在の日付と時刻になります。ただし、[〜#〜] datetime [〜#〜]列が設定されると、現在のタイムゾーンに関係なく同じ列が表示されます。

一方、[〜#〜] timestamp [〜#〜]列は、設定する '2019-01-16 12:15:00'値を取り、現在の値で解釈します1/1/1970 00:00:00 UTCを基準とした内部表現を計算するタイムゾーン。列が表示されると、現在のタイムゾーンに基づいて表示用に変換されます。 [〜#〜] timestamp [〜#〜]を、設定している値を取得し、現在のタイムゾーンからUTCに変換して保存し、それを元に戻すと考えると便利です。表示するための現在のタイムゾーン。

私のサーバーがサンフランシスコにあるが、1029年9月1日の20:00にニューヨークでイベントを実行している場合、[〜#〜] timestamp [〜#〜]を使用します。 =開始時間を保持するための列。タイムゾーンを「America/New York」に設定し、開始時間を「2009-09-01 20:00:00」に設定します。イベントが発生したかどうかを知りたい場合は、現在のタイムゾーン設定に関係なく、開始時間をNOW()と比較できます。もちろん、パースペクティブの顧客に意味のある方法で表示するには、Iwouldが正しいタイムゾーンを設定する必要があります。時間の比較を行う必要がなければ、おそらく[〜#〜] datetime [〜#〜]列を使用するほうがよいでしょう。これは正しく表示されます(暗黙のEST時間で)ゾーン)サーバーの現在のタイムゾーンに関係なく。

7
Ronald Aaronson

Saty はそれらの違いを説明しました。実際には、NOW()の出力を保持するためにdatetimeを使用できます。

例えば:

CREATE TABLE Orders
(
  OrderId int NOT NULL,
  ProductName varchar(50) NOT NULL,
  OrderDate datetime NOT NULL DEFAULT NOW(),
  PRIMARY KEY (OrderId)
)

w3schools で詳細を読むことができます。

4