Sobes.tech
Junior

Aprakstiet atšķirību starp DATETIME un TIMESTAMP datu tipus.

sobes.tech AI

Atbilde no AI

Lielākajā daļā SQL datu bāzu galvenās atšķirības starp DATETIME un TIMESTAMP ir šādas:

  • Glabāšana:

    • DATETIME glabā gadu, mēnesi, dienu, stundu, minūti, sekundi.
    • TIMESTAMP glabā sekundes skaitu kopš Unix epohas sākuma (1. janvāris 1970. UTC).
  • Vērtību diapazons:

    • DATETIME parasti ir plašāks diapazons (piemēram, no '1000-01-01 00:00:00' līdz '9999-12-31 23:59:59').
    • TIMESTAMP ir ierobežots diapazons, atkarīgs no 32 vai 64 bitu attēlojuma, parasti līdz 2038. gadam 32 bitu sistēmām.
  • Laika josla:

    • DATETIME nav atkarīgs no laika joslas un glabā precīzu ievadīto vērtību.
    • TIMESTAMP tiek pārveidots no pašreizējās laika joslas uz UTC glabāšanai un atpakaļ, tāpēc vērtība ir atkarīga no klienta laika joslas.
  • Izmērs:

    • Glabāšanas izmērs var nedaudz atšķirties, bet bieži TIMESTAMP ir mazāks (4 baiti) salīdzinājumā ar DATETIME (8 baiti).
  • Automātiska atjaunināšana:

    • TIMESTAMP var tikt iestatīts uz automātisku atjaunināšanu, mainoties rindai (ja tas ir noklusējums vai ar ON UPDATE CURRENT_TIMESTAMP), kas ir ērti pēdējā izmaiņas laika uzraudzībai. DATETIME tam nav iebūvētas iespējas (lai gan to var panākt ar trigeriem).

Salīdzināšanas tabula:

Īpašība DATETIME TIMESTAMP
Glabāšanas formāts Gads, mēnesis, diena, stunda, minūte, sekunde Sekundes no Unix epohas sākuma (UTC)
Laika josla Neatkarīga no laika joslas Atkarīga no klienta laika joslas
Diapazons Parasti plašāks, līdz 9999. gadam Ierobežots, parasti līdz 2038. gadam (32 bitu)
Automātiska atjaunināšana Nav (iebūvēts) Ir (pēc izvēles, ON UPDATE CURRENT_TIMESTAMP)
Tipa izmērs 8 baiti 4 baiti

Piemērs SQL, lai izveidotu tabulas:

-- Piemērs ar `DATETIME`
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Piemērs ar `TIMESTAMP`
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automātiska izveides laika iestatīšana
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automātiska atjaunināšana
);