-
Обикновено не трябва да правите нито едно:типовете данни в слоя на базата данни трябва да имат смисъл (доколкото е възможно) сами по себе си и да не зависят от вашето приложение, за да ги интерпретира. Както казва @Jim DeLaHunt , това позволява на базата данни лесно да ги манипулира/интерпретира от SQL според изискванията (и също така ви позволява лесен достъп до същите данни от друга кодова база на приложение в бъдеще).
MySQL има пет темпорални типа , само две от които съхраняват и дата, и час:
DATETIME
иTIMESTAMP
.Както споменаха други, разликата се свежда до това дали искате да съхраните часовата зона - въпреки че намирам, че това е доста объркващ начин да го разгледате:
-
TIMESTAMP
използваtime_zone
на сесията променлива за преобразуване на входа в UTC времеви печат и след това обратно за изход:полезно е за определяне на точен момент от времето; -
DATETIME
просто съхранява датата и часа без оглед на часовата зона, подобно на снимане на календар и часовник:полезно е за определяне на събитие, което се случва в едно и също местно време в световен мащаб.
-
-
Точно както бихте декларирали всяка друга колона, посочвате съответния тип данни след името на колоната.
Внимавайте с
TIMESTAMP
има допълнителни функции, като автоматична актуализация , което може да искате да деактивирате във вашата декларация на колона, ако желаете. -
Използвайки един от горните времеви типове, ще можете да направите всичко това (с помощта на функции за дата както се изисква). Изходът по подразбиране на
TIMESTAMP
иDATETIME
type е низ в'YYYY-MM-DD HH:MM:SS'
формат.По-специално, "изминалото време" от сравняване на две стойности може например да се получи с
TIMEDIFF()
функция:SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...