-
Normaal gesproken zou u geen van beide moeten doen:de gegevenstypen in de databaselaag moeten op zichzelf (zo goed mogelijk) zinvol zijn en niet afhankelijk zijn van uw toepassing om ze te interpreteren. Zoals @Jim DeLaHunt zegt , hierdoor kan de database ze gemakkelijk manipuleren/interpreteren vanuit SQL zoals vereist (en stelt u ook in staat om in de toekomst gemakkelijk toegang te krijgen tot dezelfde gegevens vanuit een andere applicatiecodebase).
MySQL heeft vijf tijdelijke typen , waarvan er slechts twee zowel een datum als een tijd bevatten:
DATETIME
enTIMESTAMP
.Zoals anderen al hebben gezegd, komt het verschil neer op het feit of je de tijdzone wilt opslaan - hoewel ik dat nogal een verwarrende manier vind om ernaar te kijken:
-
TIMESTAMP
gebruikt detime_zone
van de sessie variabele om invoer om te zetten in een UTC-tijdstempel en vervolgens weer terug voor uitvoer:het is handig om een exact moment in de tijd op te geven; -
DATETIME
slaat eenvoudig de datum en tijd op zonder rekening te houden met de tijdzone, net zoals het maken van een foto van een kalender en klok:het is handig om een gebeurtenis op te geven die wereldwijd in dezelfde lokale tijd plaatsvindt.
-
-
Net zoals u elke andere kolom zou declareren, specificeert u het relevante gegevenstype achter de kolomnaam.
Pas op dat
TIMESTAMP
heeft extra functies, zoals automatische update , die u desgewenst kunt uitschakelen in uw kolomdeclaratie. -
Als u een van de bovenstaande tijdelijke typen gebruikt, kunt u dit allemaal doen (met behulp van datumfuncties zoals gevraagd). De standaarduitvoer van
TIMESTAMP
enDATETIME
types is een string in'YYYY-MM-DD HH:MM:SS'
formaat.In het bijzonder kan de "verstreken tijd" van het vergelijken van twee waarden bijvoorbeeld worden verkregen met MySQL's
TIMEDIFF()
functie:SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...