Mysql
 sql >> база данни >  >> RDS >> Mysql

Настройки на сървъра за уеб и база данни за правилна часова зона UTC

Ако се ограничите до типовете DATE и DATETIME на MySQL, можете до голяма степен да игнорирате проблемите с часовата зона в самия MySQL. Искате да избегнете типа TIMESTAMP на MySQL, защото:

Що се отнася до четенето/записването на стойности DATETIME, ще получите обратно точно това, което сте въвели, което е добре.

Това ви оставя с проблема винаги да гарантирате, че записвате UTC стойности в базата данни.

Най-добрият начин да се уверите, че PHP използва UTC, е изрично да го зададете в приложението си с помощта на date_default_timezone_set() . Това ще гарантира, че извиквания като date('Y-m-d H:i:s') ще ви даде UTC стойността. Освен това ще гарантира, че нещо като (new \DateTime('now'))->getTimezone() ще върне екземпляр UTC \DateTimeZone.

Трябва да отбележите, разбира се, че нещата стават значително по-трудни, когато съхранявате стойности за дата/час, които вземате от потребителите. В тези случаи ще трябва по някакъв начин да определите в коя часова зона е потребителят и да обработите преобразуването в UTC, преди да запазите стойностите. Ако приемем, че вашите потребители имат някаква настройка за часова зона за всеки потребител, вие основно правите нещо като:

/** @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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Променете часовата зона на mysql от phpMyAdmin

  2. mysql:намиране на редове, които имат множество тагове и един и същ идентификатор

  3. Как работят интервалите от две части на количеството в СЪБИТИЕ?

  4. разлика между първичен ключ и уникален ключ

  5. Knex.js предотвратява ли инжектирането на sql?