AWS RDS MySQLのtime zoneをcakePHPで設定する

【環境】

AWS RDS MySQL 5.5

【現象と要望】

AWSのRDSでMySQLサーバを起動し、日本時間2013-04-02 15:01 :00に "SELECT NOW();" を実行すると、"2013-04-02 06:01:00"と表示される。これを日本向けに"2013-04-02 15:01:00"と表示させたい。

【対応】

phpMyAdmin>変数を表示すると、time zoneはUTCであり、上記の「06:01:00」は正しい表示結果である。

time zoneを'Asia/Tokyo'または'+09:00'に設定すれば解決しそうだが、AWS Management Console>RDS>DB Parameter Groupsを見ると、default_time_zoneは変更不可と表示されている。

対応方法の一つとして、MySQLサーバ接続ごとに、またはSQL実行ごとに「SET @@time_zone='+09:00' 」を実行する方法がある。

cakePHP 1.2での対応例を紹介する。

※ソースそのままではなく記事用に編集してあるので、もしエラーが発生したら自分で対応してほしい。

【対応例】

(1) app/config/database.php

DATABASE_CONFIGのdriverの値をmysql_customに変更し、time_zoneを追加する。

class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql_custom', // ★ココと 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'pass', 'database' => 'cake', 'prefix' => '', 'encoding' => 'utf8', 'time_zone' => '+09:00', // ★ココ );

(2) app/models/datasources/dbo_mysql_custom.php

ファイルを新規作成する。

<?php uses('model' . DS . 'datasources' . DS . 'dbo' . DS . 'dbo_mysql'); class DboMysqlCustom extends DboMysql { function connect() { $r = parent::connect(); if ($r) { if (isset($this->config['time_zone'])) { $qry = sprintf("SET @@time_zone = '%s'", $this->config['time_zone']); $this->query($qry); } } return $r; } }
タイトルとURLをコピーしました