sql >> Databasteknik >  >> RDS >> Mysql

Hur man sparar framtida(!) datum i en databas

Först har jag skrivit om detta i detalj tidigare, så läs mina svar här och här , samt det här blogginlägget av Lau Taarnskov .

När det gäller MySQL vill du i allmänhet inte använda en TIMESTAMP fältet för den lokala tiden för en framtida händelse, eftersom den konverterar från sessionens tidszon till UTC vid skrivtid och konverterar tillbaka från UTC till sessionens tidszon vid läsningstidpunkten. Även om dessa är samma tidszons-ID (vilket de inte behöver vara), finns det ingen garanti för att tidszonsdata inte kommer att ändras för en eller båda av tidszonerna mellan när du skriver data och när händelsen äger rum.

Använd istället en DATETIME fältet, som inte gör några implicita tidszonsomvandlingar. Du får det exakta värdet som du skrev. Lagra den lokala tiden för händelsen och lagra en VARCHAR fält som innehåller tidszonsidentifieraren för händelsen. Detta är det enda sättet att behålla användarens ursprungliga avsikt.

Bakgrund och kantfall beskrivs alla i de svar jag gav tidigare.



  1. Använd @@IDENTITY för att returnera det senast införda identitetsvärdet i SQL Server

  2. Laravel Den angivna nyckeln var för lång när aviseringstabellen skapades

  3. SQL Server Standard Edition High Availability Futures

  4. Kan jag styra GROUP BY i django 1.3:s orm?