Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapisać przyszłe(!) daty w bazie danych

Po pierwsze, pisałem o tym szczegółowo wcześniej, więc przeczytaj moje odpowiedzi tutaj i tutaj , a także ten post na blogu autorstwa Lau Taarnskov .

Ze szczególnym uwzględnieniem MySQL, generalnie nie chcesz używać TIMESTAMP pole czasu lokalnego przyszłego zdarzenia, ponieważ zostanie ono przekonwertowane ze strefy czasowej sesji na UTC w czasie zapisu i z powrotem z UTC na strefę czasową sesji w czasie odczytu. Nawet jeśli są to te same identyfikatory strefy czasowej (które nie muszą być), nie ma gwarancji, że dane strefy czasowej nie zmienią się dla jednej lub obu stref czasowych między zapisaniem danych a zdarzeniem ma miejsce.

Zamiast tego użyj DATETIME pole, które nie zawiera niejawnych konwersji strefy czasowej. Dostajesz dokładną wartość, którą napisałeś. Zapisz lokalny czas wydarzenia i zapisz VARCHAR pole zawierające identyfikator strefy czasowej zdarzenia. To jedyny sposób na zachowanie pierwotnej intencji użytkownika.

Przypadki uzasadniające i skrajne są opisane w odpowiedziach, których udzieliłem wcześniej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawić, by mysql uruchamiał się automatycznie? (tylko linux-cli)

  2. Echo pole logiczne jako tak/nie lub inne wartości

  3. Jak przekonwertować BLOB na VARCHAR w MySQL?

  4. Wyrażenie mysql NOW() w Doctrine QueryBuilder

  5. za pomocą mysqli, aby zapobiec wstrzykiwaniu sql, jak ustawić NULL lub CURRENT_DATE?