1. Mis on MySQL-i DATETIME
?
MySQL-i DATETIME
on andmetüüp kuupäeva ja kellaaja samaaegseks käsitlemiseks. Kuupäevade ja kellaaegade haldamine andmebaasides on hädavajalik mitmesuguste rakenduste jaoks, näiteks logide salvestamiseks ja broneerimissüsteemideks. DATETIME
tüüp salvestab kuupäeva ja kellaaja ühte välja ning suudab hoida laia väärtuste vahemikku. Vahemik on '1000-01-01 00:00:00'
kuni '9999-12-31 23:59:59'
ja see toetab ka murdsekundeid.
2. Ülevaade MySQL-i kuupäeva- ja kellaaja andmetüüpidest
2.1 Kuupäeva ja kellaaega käsitlevad andmetüübid
MySQL-is on kuupäeva ja kellaaja käsitlemiseks järgmised andmetüübid:
DATE
: Andmetüüp aasta, kuu ja päeva käsitlemiseks. Vahemik on'1000-01-01'
kuni'9999-12-31'
.TIME
: Andmetüüp ainult kellaaja käsitlemiseks. Vahemik on'-838:59:59'
kuni'838:59:59'
.DATETIME
: Andmetüüp kuupäeva ja kellaaja kombineeritud käsitlemiseks. Vahemik on'1000-01-01 00:00:00'
kuni'9999-12-31 23:59:59'
.TIMESTAMP
: Andmetüüp UNIX-i ajatempli salvestamiseks. Vahemik on'1970-01-01 00:00:01'
kuni'2038-01-19 03:14:07'
.
2.2 DATETIME
ja TIMESTAMP
erinevused
DATETIME
ja TIMESTAMP
on sarnased, kuid neil on järgmised erinevused:
- Ajavöönd:
DATETIME
salvestab fikseeritud väärtuse, mis ei sõltu ajavööndist.TIMESTAMP
seevastu teisendatakse salvestamisel UTC-ks ja hankimisel serveri praeguseks ajavööndiks. Seetõttu sobibDATETIME
ajavööndist sõltumatute kuupäevade ja kellaaegade (nt sündmuse kellaaeg) jaoks, samas kuiTIMESTAMP
sobib andmete jaoks, mis on seotud serveri ajavööndiga, näiteks logide salvestamiseks. - Salvestusvorming:
DATETIME
salvestatakse otse oma vormingus, samas kuiTIMESTAMP
salvestatakse UNIX-i ajatemplina. Seetõttu mõjutabTIMESTAMP
-i andmete aja esitust serveri ajavööndi seade.
3. Kuidas kasutada DATETIME
-i MySQL-is
3.1 DATETIME
veeru loomine
DATETIME
tüüpi veeru loomiseks kasutage järgmist SQL-i süntaksit.
CREATE TABLE sample_table (
event_time DATETIME
);
Selles näites luuakse tabelis sample_table
DATETIME
veerg nimega event_time
.
3.2 DATETIME
väärtuse sisestamine
MySQL-i DATETIME
väärtusi saab sisestada erinevates vormingutes. Põhiline vorming on 'YYYY-MM-DD HH:MM:SS'
. Näiteks:
INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');
Lisaks on lubatud ka järgmised vormingud:
'YY-MM-DD HH:MM:SS'
: Vorming, kus aasta on määratud kahe numbriga.'YYYYMMDDHHMMSS'
: Vorming, mis on määratud ilma eraldajateta.
Näiteks:
INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);
Nendes vormingutes sisestatud andmed salvestatakse õigesti. Kui aasta on määratud kahe numbriga, teisendatakse '70-99'
aastateks 1970-1999
ja '00-69'
aastateks 2000-2069
.
3.3 DATETIME
väärtuse hankimine
DATETIME
väärtuse hankimisel kuvab MySQL selle vaikimisi vormingus 'YYYY-MM-DD HH:MM:SS'
. Näiteks:
SELECT event_time FROM sample_table;
See päring kuvab tabeli DATETIME
veeru väärtused standardvormingus.
4. Murdsekundite käsitlemine
4.1 DATETIME
täpsus
MySQL-is saab DATETIME
väärtused sisaldada murdsekundeid. Täpsuse saab määrata valikuga fsp
ja murdsekundeid saab salvestada vahemikus 0 kuni 6. Näiteks, veeru loomiseks kolmekohalise murdsekundi täpsusega:
CREATE TABLE precise_times (
event_time DATETIME(3)
);
Selles näites saab veerg event_time
salvestada kuni kolm murdsekundi numbrit.
4.2 Murdsekundeid sisaldavate väärtuste sisestamine
Murdsekundeid sisaldavate DATETIME
väärtuste sisestamiseks tehke järgmist:
INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');
See päring salvestab murdsekundeid sisaldavad väärtused täpselt. Sisestatud murdosa väärtused salvestatakse kärpimata ja täpsus säilib hankimisel.
5. DATETIME
parimad praktikad
5.1 DATETIME
ja TIMESTAMP
kasutamine vastavalt vajadusele
- Millal kasutada
DATETIME
: Fikseeritud kuupäevad ja kellaajad, mis ei sõltu ajavööndist (nt sündmuse algusaeg, broneeringu kuupäev). - Millal kasutada
TIMESTAMP
: Ajavahemiku andmed, mis on seotud serveri ajavööndiga (nt andmete loomise või värskendamise aeg).
5.2 Ajavööndite haldamine
Kuna DATETIME
-l puudub ajavööndi kontseptsioon, on ajavööndi haldamine vajalik rakenduse poolel. TIMESTAMP
seevastu arvestab automaatselt serveri ajavööndiga väärtuste salvestamisel ja hankimisel, mistõttu sobib see globaalseks toimimiseks erinevates ajavööndites.
6. Levinumad vead ja nende vältimine
6.1 Nullkuupäevad ja kehtetud väärtused
MySQL-is, kui proovitakse sisestada kehtetu DATETIME
väärtus, salvestatakse nullkuupäev '0000-00-00 00:00:00'
. Kuna see ei ole tavaliselt kehtiv kuupäev, on andmete sisestamisel vaja teha valideerimine, et vältida kehtetute väärtuste sisestamist. Valideerimise rakendamine, mis tagab, et sisestatud andmed vastavad õigele vahemikule ja vormingule, aitab vältida nullkuupäevade salvestamist.
6.2 Täpsuse väärkasutamine
Murdsekundi täpsuse määramisel võib vale täpsuse kasutamine anda ootamatuid tulemusi. Määrake murdsekundi täpsus ainult siis, kui see on vajalik, ja seadistage fsp
väärtus hoolikalt. Näiteks, kui rakendus ei vaja sekundist väiksemat täpsust, ei ole vaja seadistada DATETIME
veerule murdsekundeid.
7. Kokkuvõte
See artikkel selgitas üksikasjalikult MySQL-i DATETIME
tüüpi. DATETIME
on väga kasulik andmetüüp kuupäeva ja kellaaja samaaegseks käsitlemiseks ning sobib väärtuste salvestamiseks, mis ei ole ajavööndist mõjutatud. Mõistes DATETIME
ja TIMESTAMP
erinevusi, ajavööndi käsitlust ja murdsekundite kasutamist, saate andmebaasides kuupäeva- ja kellaaja andmete haldamist tõhusalt teostada. Lisaks aitab teadmine levinumatest vigadest ja nende vältimisest säilitada andmete järjepidevuse ja usaldusväärsuse.
8. Korduma kippuvad küsimused (KKK)
K1: Mis on peamised erinevused DATETIME
ja TIMESTAMP
vahel?
DATETIME
salvestab fikseeritud kuupäeva ja kellaaja, mis ei sõltu ajavööndist. See sobib näiteks broneeringute kuupäevade või sündmuste kellaaegade salvestamiseks, mis jäävad igas ajavööndis samaks. TIMESTAMP
seevastu salvestatakse UTC-s ja teisendatakse hankimisel serveri ajavööndiks. See sobib ajavööndist sõltuvate andmete, näiteks logikirjete jaoks.
K2: Kuidas salvestada murdsekundeid DATETIME
-ga?
Murdsekundi täpsuse saab määrata, määrates fsp
väärtuse DATETIME
veeru loomisel. Näiteks, kui määrate DATETIME(3)
, saate salvestada kuni kolm murdsekundi numbrit. Sisestage murdsekundeid sisaldavad väärtused ja need salvestatakse õiges vormingus.
K3: Kas peaksin kasutama DATETIME
või TIMESTAMP
?
See sõltub kasutusotstarbest. Kui soovite salvestada fikseeritud kuupäeva ja kellaaja, kasutage DATETIME
. Kui soovite salvestada kuupäeva ja kellaaja andmeid, mis on mõjutatud serveri ajavööndist, näiteks andmete loomise või värskendamise aeg, kasutage TIMESTAMP
. TIMESTAMP
teostab automaatse ajavööndi teisenduse, mistõttu sobib see operatsioonideks, mis nõuavad toimimist erinevates ajavööndites.