sql >> Database >  >> RDS >> Mysql

MySQL-datum of PHP-tijd?

Bereik:

Er is altijd een duidelijk nadeel:het bereik dat u kunt opslaan is beperkt van 1970 tot 2038. Als u datums buiten dit bereik wilt opslaan, moet u over het algemeen een ander formaat gebruiken. Het meest voorkomende geval dat ik heb gevonden waar dit van toepassing is, is voor geboortedata.

Leesbaarheid:

Ik denk dat de belangrijkste reden dat mensen ervoor hebben gekozen om een ​​van de ingebouwde datumtypes te gebruiken, is dat de gegevens gemakkelijker te interpreteren zijn. U kunt een eenvoudige selectie uitvoeren en de waarden begrijpen zonder het antwoord verder te formatteren.

Indexen:

Een goede technische reden om de datumtypes te gebruiken, is dat het in sommige gevallen geïndexeerde zoekopdrachten mogelijk maakt, terwijl Unix-tijdstempels dat niet doen. Overweeg de volgende vraag:

SELECT * FROM tbl WHERE year(mydate_field) = 2009;

Als mydate_field van het oorspronkelijke datumtype is en er een index in het veld staat, zal deze query daadwerkelijk een index gebruiken, ondanks de functieaanroep. Dit is vrijwel de enige keer dat mysql functieaanroepen kan optimaliseren voor velden als deze. De corresponderende zoekopdracht in een tijdstempelveld kan geen indexen gebruiken:

SELECT * FROM tbl WHERE year(from_unixtime(mytimestamp_field)) = 2009;

Als je er even over nadenkt, is er echter een manier om het te omzeilen. Deze zoekopdracht doet hetzelfde, en zal indexoptimalisaties kunnen gebruiken:

SELECT * FROM tbl WHERE mytimestamp_field > unix_timestamp("2009-01-01") AND mytimestamp_field < unix_timestamp("2010-01-01");

Berekeningen:

Over het algemeen bewaar ik datums als unix time, ondanks de nadelen. Dit is niet echt gebaseerd op zijn verdiensten, maar eerder omdat ik eraan gewend ben. Ik heb gemerkt dat dit sommige berekeningen vereenvoudigt, maar andere compliceert. Het is bijvoorbeeld erg moeilijk om een ​​maand toe te voegen aan een Unix-tijdstempel, aangezien het aantal seconden per maand varieert. Dit is heel eenvoudig met de mysql DATE_ADD() functie. Ik denk echter dat het in de meeste gevallen de berekeningen juist vereenvoudigt. Het is bijvoorbeeld heel gewoon dat je de berichten van bijvoorbeeld de laatste twee dagen wilt selecteren. Als het veld een Unix-tijdstempel bevat, kan dit eenvoudig worden gedaan door het volgende te doen:

SELECT * FROM tbl WHERE mytimestamp_field > time() - 2*24*3600;

Het is waarschijnlijk een kwestie van smaak, maar persoonlijk vind ik dit sneller en gemakkelijker dan de syntaxis van een functie zoals DATE_SUB() te moeten onthouden.

Tijdzones:

Unix-tijdstempels kunnen geen tijdzonegegevens opslaan. Ik woon in Zweden, dat maar één tijdzone heeft, dus dit is niet echt een probleem voor mij. Het kan echter erg vervelend zijn als je in een land woont dat zich over meerdere tijdzones uitstrekt.



  1. PostgreSQL - Dynamische sql schrijven in opgeslagen procedure die een resultatenset retourneert

  2. Mysql-tabel maken met expliciete standaardtekenset, wat als ik dat niet doe?

  3. Gegevenskwaliteit en vaag zoeken

  4. Fix "profielnaam is niet geldig" bij het verzenden van e-mail vanaf SQL Server