Sobes.tech
Junior

Descrie diferența dintre tipurile de date DATETIME și TIMESTAMP.

sobes.tech AI

Răspuns de la AI

Principalele diferențe dintre DATETIME și TIMESTAMP în majoritatea bazelor de date SQL (de exemplu, MySQL) sunt următoarele:

  • Stocare:

    • DATETIME stochează anul, luna, ziua, ora, minutul, secundele.
    • TIMESTAMP stochează numărul de secunde de la începutul epocii Unix (1 ianuarie 1970 UTC).
  • Intervalul de valori:

    • DATETIME are de obicei un interval mai larg de date (de exemplu, de la '1000-01-01 00:00:00' până la '9999-12-31 23:59:59').
    • TIMESTAMP are un interval limitat, în funcție de reprezentarea pe 32 sau 64 de biți, de obicei până în 2038 pentru 32 de biți.
  • Fusul orar:

    • DATETIME nu depinde de fusul orar și păstrează valoarea exact introdusă.
    • TIMESTAMP este convertit din fusul orar curent în UTC la salvare și înapoi la extragere, deci valoarea depinde de fusul orar al clientului.
  • Dimensiune:

    • Dimensiunea de stocare poate varia ușor, dar adesea TIMESTAMP este mai mic (4 bytes) comparativ cu DATETIME (8 bytes).
  • Actualizare automată:

    • TIMESTAMP poate fi configurat pentru a se actualiza automat la modificarea rândului (dacă este utilizat implicit sau specificat cu ON UPDATE CURRENT_TIMESTAMP), ceea ce este util pentru câmpurile care urmăresc ultima modificare. DATETIME nu are această funcție încorporată (deși se poate realiza cu trigger-uri).

Tabel comparativ:

Caracteristică DATETIME TIMESTAMP
Format de stocare An, lună, zi, oră, minut, secundă Secunde de la începutul epocii Unix (UTC)
Fus orar Nu depinde de fusul orar Depinde de fusul orar al clientului
Interval de valori De obicei mai larg, până în 9999 Limitat, de obicei până în 2038 (pentru 32-bit)
Actualizare automată Nu (încorporat) Da (opțional, ON UPDATE CURRENT_TIMESTAMP)
Dimensiune tipică 8 bytes 4 bytes

Exemplu SQL pentru crearea tabelelor:

-- Exemplu tabel cu DATETIME
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Exemplu tabel cu TIMESTAMP
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Stabilirea automată a timpului de creare
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Actualizare automată la modificare
);