フォーラムや私のトレーニング コースで、MySQL データベースに保存され、PHP で使用される日付を管理する最良の方法 (または任意の方法) について質問している人がたくさんいます。 3 つのオプションが続きますが、最初に問題があります。
PHP は、すべての日付機能に UNIX タイムスタンプを使用します。これらのタイムスタンプをほぼすべてのテキスト形式に変換するメソッドがありますが、内部的にはタイムスタンプ形式を使用します。タイムスタンプは単なる整数です。具体的には、1970 年 1 月 1 日の午前 0 時 (グリニッジ標準時) から経過した秒数です。
MySQL には、カラムで使用できる 3 つの日付タイプがあります。これらは、DATETIME、DATE、および TIMESTAMP です。 DATETIME 列には、日付と時刻が YYYY-MM-DD HH:MM:SS 形式の文字列として保存されます (例: 2006-12-25 13:43:15)。 DATE 列では、この形式の日付部分のみを使用します – YYYY-MM-DD (例: 2006-12-25)。 TIMESTAMP カラムは、その名前とは異なり、PHP で使用される UNIX タイムスタンプとはまったく異なります。 TIMESTAMP 列は、レコードの内容が変更されるたびに現在時刻に自動的に更新される単純な DATETIME 列です。 (これは単純化していますが、大まかには真実であり、ここでは詳細は重要ではありません)。特に、MySQL のバージョン 4.1 以降、TIMESTAMP 形式は DATETIME 形式とまったく同じです。
したがって、問題は、これら 2 つのまったく異なる日付形式 (PHP タイムスタンプ整数と MySQL DATETIME 文字列) をどのように扱うかということです。一般的な解決策は 3 つあります…
一般的な解決策の 1 つは、日付を DATETIME フィールドに格納し、PHP の date() 関数と strtotime() 関数を使用して PHP タイムスタンプと MySQL DATETIME の間で変換することです。メソッドは次のように使用されます -
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
$phpdate = strtotime( $mysqldate );
2 番目のオプションは、MySQL に作業を行わせることです。 MySQL には、データベースにアクセスする時点でデータを変換するために使用できる関数があります。 UNIX_TIMESTAMP は DATETIME から PHP タイムスタンプに変換し、FROM_UNIXTIME は PHP タイムスタンプから DATETIME に変換します。メソッドは SQL クエリ内で使用されます。したがって、次のようなクエリを使用して日付を挿入および更新します -
$query = "テーブルセットを更新します
datetimefield = FROM_UNIXTIME($phpdate)
どこ…」;
$query = "SELECT UNIX_TIMESTAMP(日時フィールド)
テーブルのどこから...」;
最後のオプションは、どこでも PHP タイムスタンプ形式を使用することです。 PHP タイムスタンプは符号付き整数であるため、MySQL の整数フィールドを使用してタイムスタンプを保存します。この方法では、変換は行われず、まったく問題なく PHP タイムスタンプをデータベースに出入りするだけで済みます。
ただし、整数フィールドを使用して日付を保存すると、MySQL は日付が日付であることを認識しないため、MySQL 内の多くの機能が失われることに注意してください。 PHP のタイムスタンプは時間の経過とともに定期的に増加するため、日付フィールドでレコードを並べ替えることはできますが、データに対して MySQL の日付と時刻関数のいずれかを使用したい場合は、FROM_UNIXTIME を使用して関数の MySQL DATETIME を取得する必要があります。取り組んでください。
ただし、データベースを使用して日付情報を保存するだけであり、その操作はすべて PHP で行われる場合は問題ありません。 www.2cto.com
したがって、最終的にはどれを使用するかを選択することになります。私にとって、MySQL 内で日付を操作する必要がない場合は、競合はなく、最後のオプションが最適です。使い方は簡単で、データテーブルのストレージスペースとデータの読み書き時の実行速度の点で最も効率的です。
ただし、一部のクエリは日付フィールドに日付が含まれていないためより複雑になり (例: 誕生日が今日であるすべてのユーザーを選択するなど)、長期的には損をする可能性があります。この場合、オプション 1 または 2 のいずれかを使用する方がよいでしょう。どちらを使用するかは、作業を MySQL と PHP のどちらに配置するかによって異なります。私はオプション 2 を使用することが多いですが、正解も不正解もありません。お好みで選んでください。
最後の段落まで直接スキップした人のために要約すると、ほとんどの場合、私はオプション 3 を使用しますが、MySQL がフィールドに日付が含まれていることを認識する必要があるため、オプション 2 を使用することもあります。
著者:chenjie3392593