MySQL: Datetime Versus Stempel datatyper
timedatatyper i MySQL kan være forvirrende. Forhåpentligvis vil dette eksemplet og diskusjon bidra til å forklare forskjellene i tidsstempel og datetime datatyper
Fra MySQL referanse:.
DATETIME typen er brukes for verdier som inneholder både dato og klokkeslett deler. MySQL henter og viser datetime-verdier i "ÅÅÅÅ-MM-DD TT: MM: SS 'format. Det området som støttes er "1000-01-01 00:00:00" til "9999-12-31 23:59:59". TIMESTAMP datatypen brukes for verdier som inneholder både dato og klokkeslett deler. TIMESTAMP har en rekke "1970-01-01 00:00:01" UTC til '2038-01-19 03:14:07' UTC. En stor forskjell mellom disse to datatyper er at TIMESTAMP datatype verdier blir konvertert fra gjeldende tidssone til UTC for lagring formål og konverteres tilbake fra UTC til gjeldende tidssone når de brukes. De datetime datatype verdier er uendret i forhold til tidssonen Dette eksemplet er en god øvelse i å demonstrere forskjellen mellom disse to datatypene
mysql >..; vise variabler som «% TIME_ZONE% '; + ------------------ + --------------------- + | VARIABLE_NAME | Verdi | + ------------------ + --------------------- + | system_time_zone | India Standard Time || TIME_ZONE | Asia /Calcutta | + ------------------ + --------------------- + 2 rader i settet (0,00 sek)
Du kan se våre nåværende tidssone. Under dette miljøet, la oss lage en tabell med de to datatyper og fylle den med det samme tidsmessig informasjon
opprette tabellen datedemo (mydatetime datetime, mytimestamp timestamp);. Query OK, 0 rader berørt (0,05 sek)
sette inn datedemo verdier ((nå ()), (nå ())); Query OK, 1 rad påvirket (0,02 sek)
velg * fra datedemo; + ---------- ----------- + --------------------- + | mydatetime | mytimestamp | + --------------------- + --------------------- + | 2011-08-21 14:11:09 | 2011-08-21 14:11:09 | + --------------------- + ---------------- ----- + en rad i sett (0,00 sek)
på dette punktet datetime og tidsstempel datatyper har forblitt de samme verdiene. La oss endre tidssonen se resultatene
SET TIME_ZONE = "Amerika /new_york";. Query OK, 0 rader berørt (0,00 sek)
velg * fra datedemo; + ------ --------------- + --------------------- + | mydatetime | mytimestamp | + --------------------- + --------------------- + | 2011-08-21 14:11:09 | 2011-08-21 04:41:09 | + --------------------- + ---------------- ----- + en rad i sett (0,00 sek)
eksempelet ovenfor viser hvordan TIMESTAMP dato type endret verdiene etter endring av tidssone til "Amerika /new_work" hvor DATETIME er uendret.