Junior
Opisz różnicę między typami danych DATETIME i TIMESTAMP.
sobes.tech AI
Odpowiedź od AI
Główne różnice między DATETIME a TIMESTAMP w większości baz danych SQL (np. MySQL) są następujące:
-
Przechowywanie:
DATETIMEprzechowuje rok, miesiąc, dzień, godzinę, minutę, sekundę.TIMESTAMPprzechowuje liczbę sekund od początku epoki Unix (1 stycznia 1970 UTC).
-
Zakres wartości:
DATETIMEzazwyczaj ma szerszy zakres dat (np. od '1000-01-01 00:00:00' do '9999-12-31 23:59:59').TIMESTAMPma ograniczony zakres, zależny od reprezentacji 32-bitowej lub 64-bitowej, zwykle do 2038 roku dla 32-bitów.
-
Strefa czasowa:
DATETIMEnie zależy od strefy czasowej i zapisuje dokładną wprowadzoną wartość.TIMESTAMPjest konwertowany z aktualnej strefy czasowej na UTC podczas zapisu i z powrotem podczas odczytu, więc jego wartość zależy od strefy czasowej klienta.
-
Rozmiar:
- Rozmiar przechowywania może się nieznacznie różnić, ale często
TIMESTAMPjest mniejszy (4 bajty) w porównaniu doDATETIME(8 bajtów).
- Rozmiar przechowywania może się nieznacznie różnić, ale często
-
Automatyczna aktualizacja:
TIMESTAMPmoże być skonfigurowany do automatycznej aktualizacji przy zmianie wiersza (jeśli jest używany domyślnie lub określony jakoON UPDATE CURRENT_TIMESTAMP), co jest wygodne dla pól śledzących ostatnią zmianę.DATETIMEnie ma takiej wbudowanej funkcji (choć można to osiągnąć za pomocą triggerów).
Tabela porównawcza:
| Cecha | DATETIME | TIMESTAMP |
|---|---|---|
| Format przechowywania | Rok, miesiąc, dzień, godzina, minuta, sekunda | Sekundy od początku epoki Unix (UTC) |
| Strefa czasowa | Nie zależy od strefy czasowej | Zależy od strefy czasowej klienta |
| Zakres wartości | Zazwyczaj szerszy, do roku 9999 | Ograniczony, zazwyczaj do 2038 (dla 32-bitów) |
| Automatyczna aktualizacja | Nie (wbudowana) | Tak (opcjonalnie, ON UPDATE CURRENT_TIMESTAMP) |
| Typowy rozmiar | 8 bajtów | 4 bajty |
Przykład SQL do tworzenia tabel:
-- Przykład tabeli z DATETIME
CREATE TABLE events_datetime (
id INT PRIMARY KEY,
event_name VARCHAR(255),
event_time DATETIME
);
-- Przykład tabeli z TIMESTAMP
CREATE TABLE events_timestamp (
id INT PRIMARY KEY,
event_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Automatyczne ustawienie czasu utworzenia
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Automatyczna aktualizacja przy zmianie
);