web-dev-qa-db-ja.com

MySQLの日時とタイムスタンプ、およびPHP実際には?

データタイプを日時またはタイムスタンプとして指定する方法がわかりません。両方が必要ですが、異なるイベントで必要です。私のウェブサイトは世界中で製品とサービスを販売しており、ユーザーがログインするためのアカウントシステムも持っています。以下を明確にしてください:

  • 顧客が私のWebサイトから製品を購入した現在の日時:日時?
  • 私たちのシステムから計算された場所と購入日時に基づく配達日時:日時?
  • アカウントに最後にログインした時間:タイムスタンプ?

    1. 購入日(現在の日付)を保存してデータベースに保存するためのphpのコードは何ですか?
    2. それぞれの使い方を詳しく説明してください。インターネットでたくさんの説明を読んでもまだわかりません。
24
Modular

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です。

もちろん、DATETIMEもあり、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に関連する質問 があります。質問する前に必ず確認してください。ヒント、 準備されたステートメント はすばらしいです子供たちはそれを行います。

29
yannis

この記事からの参照:

主な違い:

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 ′

2
Anvesh