sql >> Database teknologi >  >> RDS >> Mysql

Sådan gemmer du fremtidige(!) datoer i en database

Først har jeg skrevet om dette i detaljer før, så læs venligst mine svar her og her , samt dette blogindlæg af Lau Taarnskov .

Med særlig hensyn til MySQL ønsker du generelt ikke at bruge en TIMESTAMP felt for den lokale tid for en fremtidig hændelse, da den vil konvertere fra sessionens tidszone til UTC på skrivetidspunktet og konvertere tilbage fra UTC til sessionens tidszone på læsetidspunktet. Selvom disse er de samme tidszone-id'er (hvilket de ikke behøver at være), er der ingen garanti for, at tidszonedataene ikke ændres for en eller begge af tidszonerne mellem hvornår du skriver dataene og hvornår begivenheden finder sted.

Brug i stedet en DATETIME felt, som ikke foretager implicitte tidszonekonverteringer. Du får den nøjagtige værdi ud, som du skrev. Gem det lokale tidspunkt for begivenheden, og gem en VARCHAR felt, der indeholder tidszone-id'et for hændelsen. Dette er den eneste måde at bevare brugerens oprindelige hensigt på.

Begrundelse og kanttilfælde er alle beskrevet i de svar, jeg gav tidligere.



  1. Implikationer af Supertype og Subtype

  2. Hvordan Postgresql KOPIERING TIL STDIN Med CSV opdateres ved konflikt?

  3. Gentagne MySQL-forespørgsler fra Python returnerer de samme data

  4. Hvordan RANK() virker i SQL Server