MySQL DATETIME: põhjalik juhend andmebaasi kuupäevade ja kellaaegade haldamiseks

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 sobib DATETIME ajavööndist sõltumatute kuupäevade ja kellaaegade (nt sündmuse kellaaeg) jaoks, samas kui TIMESTAMP sobib andmete jaoks, mis on seotud serveri ajavööndiga, näiteks logide salvestamiseks.
  •  

  • Salvestusvorming: DATETIME salvestatakse otse oma vormingus, samas kui TIMESTAMP salvestatakse UNIX-i ajatemplina. Seetõttu mõjutab TIMESTAMP-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.