sql >> データベース >  >> RDS >> Mysql

UTCタイムゾーンを正しく取得するためのWebおよびデータベースサーバーの設定

    MySQLのDATEタイプとDATETIMEタイプに制限する場合は、MySQL自体のタイムゾーンの問題をほとんど無視できます。 MySQLのTIMESTAMPタイプを避けたい理由は、次のとおりです。

    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. PostGISの遅さの調査(2019年版)

    2. Entity Frameworkを使用してOracleパッケージ内のストアドプロシージャを呼び出す方法は?

    3. MYSQL_ATTR_INIT_COMMANDが使用されている場合、PDOスローエラー

    4. JavaMySQLプリペアドステートメントバッチ