【環境】
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', // ★ココ
);
Code language: PHP (php)
(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;
}
}
Code language: HTML, XML (xml)