sql >> Database >  >> RDS >> Mysql

Web- en databaseserverinstellingen om de UTC-tijdzone goed te krijgen

Als u zich beperkt tot MySQL's DATE- en DATETIME-typen, kunt u problemen met de tijdzone grotendeels negeren in MySQL zelf. U wilt het TIMESTAMP-type van MySQL vermijden omdat:

Wat betreft het lezen/schrijven van DATETIME-waarden, je krijgt precies terug wat je hebt ingevoerd, wat goed is.

Dat geeft je het probleem om er altijd voor te zorgen dat je UTC-waarden naar de database schrijft.

De beste manier om ervoor te zorgen dat PHP UTC gebruikt, is door dit expliciet in uw toepassing in te stellen met date_default_timezone_set() . Dat zorgt ervoor dat aanroepen als date('Y-m-d H:i:s') geeft u de UTC-waarde. Het zorgt er ook voor dat iets als (new \DateTime('now'))->getTimezone() zal een UTC \DateTimeZone-instantie retourneren.

Houd er natuurlijk rekening mee dat het aanzienlijk moeilijker wordt als u datum-/tijdwaarden opslaat die u van gebruikers overneemt. In die gevallen moet u op de een of andere manier bepalen in welke tijdzone de gebruiker zich bevindt en de conversie naar UTC afhandelen voordat u de waarden behoudt. Ervan uitgaande dat uw gebruikers een tijdzone-instelling per gebruiker hebben, doet u in feite zoiets als:

/** @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. Vraag om het meest recente record en (in geval van gelijkspel) met de hogere waarde of percentage per kaart en service

  2. Een gebruiker maken in Oracle 11g en machtigingen verlenen

  3. Spring JDBC - Laatst ingevoegde id

  4. Mysql-php hoe een verbindingspool te implementeren met php v 5.2 en geen permanente verbinding toegestaan