-
Typisk bør du hverken gøre det:datatyperne i databaselaget burde være meningsfulde (som muligt) i sig selv og ikke afhænge af din applikation til at fortolke dem. Som @Jim DeLaHunt siger , dette gør det muligt for databasen nemt at manipulere/fortolke dem fra SQL efter behov (og giver dig også mulighed for nemt at få adgang til de samme data fra en anden applikationskodebase i fremtiden).
MySQL har fem tidsmæssige typer , hvoraf kun to gemmer både en dato og et klokkeslæt:
DATETIME
ogTIMESTAMP
.Som andre har hentydet, kommer forskellen ned på, om du ønsker at gemme tidszonen - selvom jeg synes, det er en ret forvirrende måde at se det på:
-
TIMESTAMP
bruger sessionenstime_zone
variabel til at konvertere input til et UTC-tidsstempel og derefter tilbage igen for output:det er nyttigt til at specificere et nøjagtigt tidspunkt i tiden; -
DATETIME
gemmer blot datoen og klokkeslættet uden hensyn til tidszone, ligesom at tage et billede af en kalender og et ur:det er nyttigt til at specificere en begivenhed, der finder sted i samme lokale tid globalt.
-
-
Ligesom du ville erklære enhver anden kolonne, angiver du den relevante datatype efter kolonnenavnet.
Pas på at
TIMESTAMP
har yderligere funktioner, såsom automatisk opdatering , som du måske ønsker at deaktivere i din kolonneerklæring, hvis det ønskes. -
Ved at bruge en af ovenstående tidsmæssige typer vil du være i stand til at gøre alt dette (ved at bruge datofunktioner som krævet). Standardoutputtet for
TIMESTAMP
ogDATETIME
typer er en streng i'YYYY-MM-DD HH:MM:SS'
format.Især den "forløbne tid" ved at sammenligne to værdier kunne f.eks. fås med MySQL's
TIMEDIFF()
funktion:SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...