WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

MySQLのNOW()を使ったSQL文をアプリケーション側で利用する際の注意

   

MySQLのNOW()を使ったSQL文をアプリケーション側で利用する際の注意

MySQLのNOW()はDBサーバのUTC時間を返すため、アプリケーションサーバとDBサーバでタイムゾーンが異なる場合に齟齬が発生する。

例えばAWSのRDSをDBサーバを利用してそのリージョンがオレゴンで、アプリケーションサーバのリージョンが東京などという場合に注意が必要。
以下のようなコード(PHPの場合)を書くと、東京での時刻ではなくオレゴンでの時刻との比較となってしまい意図しない結果となってしまう。


‘conditions’ => array(
“updated_at < (NOW() - INTERVAL 10 MINUTE)", ), [/php]

以下のように、コードでアプリケーションサーバでの時刻を指定するようにする必要がある。


$datetime = date(‘Y-m-d H:i:s’); // アプリサーバの時刻
// 〜(略)〜
‘conditions’ => array(
“updated_at < ('{$datetime}' - INTERVAL 10 MINUTE)", ), [/php]

 - MySQL , , ,