PHP 開発用の MySQL での DATETIME と TIMESTAMP の選択

PHP 開発用の MySQL での DATETIME と TIMESTAMP の選択
PHP 開発用の MySQL での DATETIME と TIMESTAMP の選択

MySQL の日付と時刻のデータ型を理解する

MySQL を使用する場合、日付と時刻の値を保存するために適切なデータ型を選択すると、データベースのパフォーマンスと機能に大きな影響を与える可能性があります。この記事では、DATETIME データ型と TIMESTAMP データ型の違いについて説明し、PHP サーバー側環境でのこれらのデータ型の使用に関する推奨事項を示します。

これらの違いを理解すると、データベース スキーマ設計について情報に基づいた決定を下すのに役立ちます。両方のデータ タイプの特性を調べ、その利点と制限について説明し、特定のニーズと使用例に基づいて適切なデータ タイプを選択するための実践的なアドバイスを提供します。

指示 説明
CREATE TABLE 指定された列と制約を使用してデータベースに新しいテーブルを作成します。
DATETIME タイムゾーンなしで日付と時刻の値を保存します。履歴データに適しています。
TIMESTAMP 日付と時刻の値を保存し、保存する場合は UTC に変換し、取得する場合は現地時間に戻します。
AUTO_INCREMENT 新しいレコードがテーブルに挿入されるたびに、一意の番号を自動的に生成します。
DEFAULT CURRENT_TIMESTAMP 新しいレコードが作成されるとき、TIMESTAMP フィールドのデフォルト値を現在の日付と時刻に設定します。
$conn->query($sql) データベースに対してクエリを実行します。データの挿入と取得の両方に使用されます。
$conn->fetch_assoc() 列名がキーとなる結果行を連想配列としてフェッチします。

MySQL の日付と時刻フィールドの実装

提供されたスクリプトは、効果的な使用方法を示しています。 DATETIME そして TIMESTAMP サーバー側で PHP を使用する場合の MySQL のデータ型。最初のスクリプトは、という名前の MySQL テーブルを作成します。 events、これには 2 つの日付と時刻のフィールドが含まれます。 event_date そして created_at。の DATETIME タイプは次のために使用されます event_date タイムゾーンを考慮せずにイベントの特定の日付と時刻を保存し、履歴データに適したものにします。の TIMESTAMP タイプは次のために使用されます created_at 各レコードがいつ作成されたかを自動的に追跡し、保存時に時刻を UTC に変換し、取得時に現地時刻に戻します。この区別は、タイムゾーンを考慮する必要があるアプリケーションにとって重要です。 2 番目のスクリプトは、データを events PHPを使用したテーブル。 MySQL データベースに接続し、 INSERT ステートメントを作成し、それを実行して新しいイベント レコードを追加します。データベースへの接続は、 new mysqli() 関数でクエリが実行されます。 $conn->query($sql) 方法。このスクリプトには、接続が失敗した場合やクエリで問題が発生した場合にフィードバックを提供するためのエラー処理も含まれています。この PHP スクリプトは、日付と時刻のデータが正しくフォーマットされてデータベースに挿入されることを保証します。

3 番目のスクリプトは、 events テーブル。再びデータベースに接続し、 SELECT クエリを実行してすべてのレコードを取得し、結果を処理します。の $result->fetch_assoc() 関数を使用して各行を連想配列としてフェッチし、名前によって列の値に簡単にアクセスできるようにします。次に、スクリプトは結果セットをループして、 idevent_nameevent_date、 そして created_at 各レコードのフィールド。これは、両方に保存されたデータを処理および表示する方法を示しています。 DATETIME そして TIMESTAMP フォーマットを使用して、アプリケーションが時間関連の情報を正しく解釈して表示できるようにします。

MySQL での DATETIME と TIMESTAMP の使用

PHP と MySQL: データベース スキーマの設計

// Backend: Creating a MySQL Table with DATETIME and TIMESTAMP fields
CREATE TABLE events (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_name VARCHAR(100) NOT ,
    event_date DATETIME NOT ,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
// Explanation:
// 'event_date' uses DATETIME to store the date and time of the event.
// 'created_at' uses TIMESTAMP to automatically track the record creation time.

MySQL テーブルへのデータの挿入

PHP および MySQL: データ挿入スクリプト

<?php
// Backend: PHP Script to Insert Data into the MySQL Table
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$event_name = "Sample Event";
$event_date = "2024-07-10 12:00:00";
$sql = "INSERT INTO events (event_name, event_date)
VALUES ('$event_name', '$event_date')";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

データの取得と表示

PHP と MySQL: データの取得と表示

<?php
// Backend: PHP Script to Retrieve and Display Data from MySQL Table
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, event_name, event_date, created_at FROM events";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["event_name"].
             " - Event Date: " . $row["event_date"].
             " - Created At: " . $row["created_at"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>

MySQL での DATETIME と TIMESTAMP の選択

どちらかを決めるときは、 DATETIME そして TIMESTAMP MySQL のデータ型を使用するには、その固有の特性と、それらがアプリケーションの要件にどのように適合するかを考慮することが重要です。の DATETIME type は、ユーザーの場所に関係なく変更されるべき過去の記録やイベントの日付など、異なるタイムゾーン間で一貫性を保つ必要がある日付と時刻を保存するのに最適です。それの訳は DATETIME タイムゾーンは考慮されません。入力された正確な日付と時刻が保存されるため、使い方は簡単ですが、グローバルな一貫性が必要な場合には問題が発生する可能性があります。

一方、 TIMESTAMP type は、UTC を基準とした時刻値を保存するように設計されており、取得時に値をサーバーのタイム ゾーンに自動的に変換します。これにより、 TIMESTAMP 異なるタイムゾーン間で一貫性が保証されるため、レコードの作成時間や更新時間などの変更を追跡する場合に特に役立ちます。一緒に作業するとき PHPを使用して TIMESTAMP タイムゾーンの差の管理が簡素化され、ユーザーに正確な現地時間を簡単に提示できるようになります。しかし、 TIMESTAMP に比べて範囲がより制限されています DATETIME、1970 年から 2038 年までの日付のみをサポートしています。これは、長期的なアプリケーションを考慮する必要があるかもしれません。

MySQL の DATETIME と TIMESTAMP に関する一般的な質問と回答

  1. MySQL の DATETIME と TIMESTAMP の主な違いは何ですか?
  2. DATETIME 日付と時刻をそのまま保存しますが、 TIMESTAMP それを UTC で保存し、サーバーのタイムゾーンに変換します。
  3. イベント日付の記録にはどのデータ型を使用すればよいですか?
  4. DATETIME タイムゾーン間で一貫性が維持されるため、イベントの日付には推奨されます。
  5. レコードの作成時間を追跡するのに最適なデータ型は何ですか?
  6. TIMESTAMP は、現在の時刻が自動的に使用され、タイム ゾーンに合わせて調整されるため、作成時刻の追跡に最適です。
  7. MySQL は TIMESTAMP を使用してタイムゾーンをどのように処理しますか?
  8. MySQL ストア TIMESTAMP 値を UTC で取得し、取得時に現在のタイムゾーンに変換します。
  9. TIMESTAMP を使用して 1970 年より前の日付を保存できますか?
  10. いいえ、 TIMESTAMP 1970 年から 2038 年の日付のみをサポートします。 DATETIME この範囲外の日付の場合。
  11. TIMESTAMP はレコードの変更時に自動的に更新されますか?
  12. はい、次のように定義されている場合 DEFAULT CURRENT_TIMESTAMP そして ON UPDATE CURRENT_TIMESTAMP, TIMESTAMPは自動的に更新されます。
  13. DATETIME フィールドに無効な日付を挿入するとどうなりますか?
  14. MySQL は、日付が無効な場合、SQL モードに応じて「0000-00-00 00:00:00」を挿入します。
  15. 異なるサーバー間で時刻ストレージの一貫性を確保するにはどうすればよいですか?
  16. 使用する TIMESTAMP すべての時間を UTC に変換するため、時間の一貫性が保証されます。
  17. DATETIME および TIMESTAMP を含む関数を使用できますか?
  18. はい、MySQL は次のように機能します。 NOW() そして CURRENT_TIMESTAMP 両方のデータ型を処理します。
  19. どのデータ型がよりストレージ効率的ですか?
  20. TIMESTAMP DATETIME の 8 バイトと比較して 4 バイトを使用するため、ストレージ効率が高くなります。

MySQL の日付と時刻の型に関する最終的な考え

結論から言うと、どちらも DATETIME そして TIMESTAMP データ型は、MySQL データベース設計において重要な役割を果たします。 DATETIME 履歴記録やタイムゾーンの一貫性が重要な場合に好まれますが、 TIMESTAMP 自動 UTC 変換による変更の追跡に有利です。日付と時刻を正確かつ効率的に処理するには、アプリケーションの特定のニーズに合わせて選択する必要があります。