2016-04-29 7 views
0

私のテーブルには日付フィールドタイプと時間フィールドタイプがあります。テーブルにはいくつかの行があります:時間フィールドは15:00:00と16:00:00のような値を持ちます。タイムゾーンに感染していないことを知って、時間の種類を選択しました。Mysqlのブロックタイムゾーン変換:オリジナルの時刻または日付の値をデータベース値と比較します。

私の問題は、mysqlクライアント(ユーザ)のタイムゾーンがUTC + 3なので、ユーザが時刻が18:00:00である場所を選択したい場合には、時刻の値が15:00:00ユーザーが指定したものがUTC; 18:00:00 = 15:00:00に変換されています)。しかし、それは私が望むものではありません。

ユーザーが18:00:00を指定した場合は、UTC値と見なす必要があります。そのため、18:00:00は時刻が18:00:00でない15:00:00に保存されている行のみを選択します。私はselect donnees.* from donnees where timefield=CONVERT_TZ(:ptime,'UTC','Africa/Nairobi');を使用しようとしましたが、動作しておらず、ヌル値を与えています。

私は本当に混乱しています。どうすればそれを正しく比較できますか?

答えて

1

dbコンポーネントの 'afterOpen'イベントを拡張します。 config/main.phpで

、などの 'DB' コンポーネントを指定します。

'db' => [ 
    'class' => 'yii\db\Connection', 
    'dsn' => 'mysql:host=localhost;dbname=db_name', 
    'username' => 'db_username', 
    'password' => 'db_password', 
    'charset' => 'utf8', 

    'on afterOpen' => function($event) { 
      $event->sender->createCommand("SET time_zone = '+00:00'")->execute(); 
    }    
], 
+0

しかし、これはすべてのクエリまさに – aidonsnous

+0

のために有効になります。それ以外の場合は、必要に応じて "SET time_zone = '+ 00:00'"をデータベースに送信できます。 –

関連する問題