Heim  >  Artikel  >  Datenbank  >  MySQL: Verwendung und Verbesserung von „DATETIME“ und „TIMESTAMP“.

MySQL: Verwendung und Verbesserung von „DATETIME“ und „TIMESTAMP“.

王林
王林Original
2024-07-19 12:40:08716Durchsuche

MySQL: Using and Enhancing `DATETIME` and `TIMESTAMP`

Einführung

In MySQL sind DATETIME und TIMESTAMP häufig verwendete Datentypen zum Speichern von Zeitwerten. Obwohl beide zum Speichern von Datum und Uhrzeit dienen, gibt es grundlegende Unterschiede zwischen ihnen, die sich auf ihre Verwendung auswirken. In diesem Artikel werden die Unterschiede zwischen DATETIME und TIMESTAMP untersucht und wie einige Einschränkungen von DATETIME überwunden werden können, um die Vorteile von TIMESTAMP zu nutzen.

Unterschiede zwischen DATETIME und TIMESTAMP

Reichweite:
  • DATETIME: Kann Werte von „1000-01-01 00:00:00“ bis „9999-12-31 23:59:59“ speichern.
  • TIMESTAMP: Kann Werte von „1970-01-01 00:00:01“ bis „2038-01-19 03:14:07“ speichern.
Lagerung:
  • DATETIME: Wird unverändert im Datums- und Uhrzeitformat gespeichert, ohne auf die Zeitzone angewiesen zu sein. Es erfordert 8 Byte Speicherplatz.
  • TIMESTAMP: Wird als Ganzzahl gespeichert, die die Anzahl der Sekunden seit dem 01.01.1970 um 00:00:00 UTC darstellt. Es erfordert 4 Byte Speicherplatz.
Zeitzone:
  • DATETIME: Hängt nicht von der Zeitzone ab und speichert den Wert unverändert.
  • TIMESTAMP: Wird von der aktuellen Zeitzone des MySQL-Servers beeinflusst. Beim Einfügen oder Abrufen von Werten werden diese automatisch zwischen der Ortszeit und UTC umgerechnet.
Automatische Updates:
  • DATETIME: Unterstützt keine automatischen Aktualisierungen direkt, wenn eine Zeile geändert wird.
  • TIMESTAMP: Kann mithilfe der Optionen DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP so eingestellt werden, dass der Wert automatisch aktualisiert wird, wenn eine Zeile geändert wird.

Verbesserung der DATETIME-Nutzung

Um einige Einschränkungen des DATETIME-Datentyps zu überwinden, können Sie diese Strategien befolgen:

1. Standardisierung der Zeitzone

Um das Problem zu lösen, dass DATETIME nicht der Zeitzone entspricht, können Sie alle zeitlichen Vorgänge auf Datenbank- und Anwendungsebene standardisieren, um UTC zu verwenden.

Einstellen der Datenbank auf UTC:
SET GLOBAL time_zone = '+00:00';
SET time_zone = '+00:00';
Konvertieren von Werten in UTC beim Einfügen:
INSERT INTO example_table (event_time) VALUES (CONVERT_TZ('2024-06-19 12:30:00', 'Your/Timezone', '+00:00'));
Konvertieren von Werten von UTC in Ortszeit beim Abrufen:
SELECT CONVERT_TZ(event_time, '+00:00', 'Your/Timezone') as local_event_time FROM example_table;
2. Automatische Updates

Um DATETIME-Werte automatisch zu aktualisieren, wenn eine Zeile geändert wird, können Sie Trigger verwenden.

Erstellen eines Triggers zum Aktualisieren des Felds bei Änderung:
CREATE TRIGGER before_update_example_table
BEFORE UPDATE ON example_table
FOR EACH ROW
BEGIN
  SET NEW.updated_at = NOW();
END;
3. Verwendung von Standardwerten

Um DATETIME-Werte beim Einfügen automatisch festzulegen, können Sie mit der Funktion NOW() Standardwerte zuweisen.

Standardfelder festlegen:
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
4. Präzision im Umgang

Wenn eine höhere Präzision für Zeiten erforderlich ist, können Sie DATETIME(6) oder TIMESTAMP(6) verwenden, um Zeiten mit einer Genauigkeit von Mikrosekunden zu speichern.

Erstellen einer Tabelle mit Mikrosekundengenauigkeit:
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
    updated_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
5. Bearbeitungszeiten im Antrag

Stellen Sie sicher, dass Ihre Anwendung Zeiten korrekt verarbeitet, indem Sie alle Zeiten vor dem Speichern in UTC umwandeln und sie bei der Anzeige für den Benutzer wieder in Ortszeit umwandeln.

Beispiel in PHP:
// Setting the application time zone to UTC
date_default_timezone_set('UTC');

// Storing the current time as UTC
$current_time_utc = date('Y-m-d H:i:s');
$query = "INSERT INTO example_table (event_time) VALUES ('$current_time_utc')";

// Retrieving the time and converting it to local time
$event_time_utc = '2024-06-19 12:30:00';
$event_time_local = new DateTime($event_time_utc, new DateTimeZone('UTC'));
$event_time_local->setTimezone(new DateTimeZone('Your/Timezone'));
echo $event_time_local->format('Y-m-d H:i:s');

Zusammenfassung

  • DATETIME: Wird zum Speichern von Datums- und Uhrzeitangaben ohne Zeitzonenabhängigkeiten verwendet. Geeignet für zukünftige Veranstaltungen oder feste Termine.
  • TIMESTAMP: Wird zur Verfolgung der Zeit relativ zur aktuellen Zeitzone verwendet. Geeignet zum Protokollieren des Zeitpunkts, zu dem Daten eingefügt oder aktualisiert werden.

DATETIME verbessern

  • Standardisierung der Zeitzone: Verwenden Sie UTC, um die Zeiten zu standardisieren.
  • Automatische Aktualisierungen: Verwenden Sie Trigger, um Felder automatisch zu aktualisieren.
  • Standardwerte: Legen Sie Standardwerte für das Feld DATETIME fest.
  • Präzision: Verwenden Sie DATETIME(6) für höhere Präzision.
  • Verarbeitung von Zeiten in der Anwendung: Konvertieren Sie Zeiten korrekt zwischen UTC und Ortszeit.

Wenn Sie diese Strategien befolgen, können Sie die Vorteile von TIMESTAMP bei der Verwendung von DATETIME nutzen und so den effizienten und effektiven Umgang mit Zeitwerten vereinfachen.

Das obige ist der detaillierte Inhalt vonMySQL: Verwendung und Verbesserung von „DATETIME“ und „TIMESTAMP“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn