sql >> Databáze >  >> RDS >> Mysql

Nastavení webového a databázového serveru pro správné časové pásmo UTC

Pokud se omezíte na MySQL typy DATE a DATETIME, můžete do značné míry ignorovat problémy s časovým pásmem v samotné MySQL. Chcete se vyhnout typu TIMESTAMP MySQL, protože:

Pokud jde o čtení/zápis hodnot DATETIME, dostanete zpět přesně to, co jste vložili, což je dobře.

To vám dává problém se vždy ujistit, že zapisujete hodnoty UTC do databáze.

Nejlepší způsob, jak zajistit, že PHP používá UTC, je explicitně jej nastavit ve vaší aplikaci pomocí date_default_timezone_set() . To zajistí, že volání jako date('Y-m-d H:i:s') vám dá hodnotu UTC. Také zajistí, že něco jako (new \DateTime('now'))->getTimezone() vrátí instanci UTC \DateTimeZone.

Měli byste si samozřejmě uvědomit, že věci jsou výrazně obtížnější, když ukládáte hodnoty data a času, které přebíráte od uživatelů. V těchto případech budete muset nějakým způsobem určit, v jakém časovém pásmu se uživatel nachází, a před zachováním hodnot provést převod na UTC. Za předpokladu, že vaši uživatelé mají nějaké nastavení časového pásma pro jednotlivé uživatele, uděláte v podstatě něco jako:

/** @var \DateTimeZone $userTZ */
$userTz = getUserTimezone();
$dateTime = new \DateTime($user_submitted_date_string, $userTz);
$dateTime->setTimezone(new \DateTime('UTC'));
$dateTimeStr = $dateTime->format('Y-m-d H:i:s');


  1. Jak vyprázdnit všechny řádky ze všech tabulek v mysql (v sql)

  2. Porovnávání hodnot v mysql na základě časového razítka a identifikace trendů

  3. Výkon rekurzivních uložených procedur v MYSQL pro získání hierarchických dat

  4. jak uložit serializovaný objekt s jmenným prostorem v databázi pomocí pdo php