目次
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:
DATETIMEsalvestab fikseeritud väärtuse, mis ei sõltu ajavööndist.TIMESTAMPseevastu teisendatakse salvestamisel UTC-ks ja hankimisel serveri praeguseks ajavööndiks. Seetõttu sobibDATETIMEajavööndist sõltumatute kuupäevade ja kellaaegade (nt sündmuse kellaaeg) jaoks, samas kuiTIMESTAMPsobib andmete jaoks, mis on seotud serveri ajavööndiga, näiteks logide salvestamiseks. - Salvestusvorming:
DATETIMEsalvestatakse otse oma vormingus, samas kuiTIMESTAMPsalvestatakse 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.
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 sisaldavateDATETIME 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
KunaDATETIME-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 kehtetuDATETIME 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 seadistagefsp 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-iDATETIME 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.

