2017-06-13 3 views
0

MySQLセッションのタイムゾーンを設定しているPHPスクリプトがあります。私は出力をチェックして、正しくオフセットを送信しています。+1:00(ヨーロッパ/ロンドン、DST)。しかし、私はデータベースに配置されているタイムスタンプを読むと、それは8時間遅れです。なぜこうなった?SQLは、PHPによって設定されたタイムゾーンよりも8時間遅い

MySQLサーバはタイムスタンプをデフォルト値として設定しています。

+1

「デフォルト値」は、サーバーの値です。サーバー上に設定されているタイムゾーンは何ですか? (コマンドラインで 'date'を使用するとタイムゾーンが表示されます) – aynber

+0

@aynberこれは共有サーバーなので、コマンドラインにアクセスできません。 – StellarDoor5319

答えて

1

データベースパラメータを更新します。リクエストで直接

SET GLOBAL time_zone = 'Europe/London'; 
// OR: SET time_zone = 'Europe/London'; 
// OR: SET @@session.time_zone = 'Europe/London'; 

更新のタイムゾーン:

date_default_timezone_set('Europe/London'); 

SELECT ..., CONVERT_TZ(field, 'GMT', 'Europe/London') FROM ... 

は、エントリ・ファイル(index.phpのような)適切なタイムゾーンで定義しますさらに、サーバ(サンプル、Ubuntu)で行うことができます:

sudo timedatectl set-timezone Europe/London 
# do not forget to restart all services: nginx|Apache, mysql, ... 
+0

私は共有サーバー上にいるので、私は 'GLOBAL'を使う権利がありません。しかし、私は既に 'GLOBAL'なしで最初のコマンドを実行していますが、' +1:00'という値を渡しています。 – StellarDoor5319

+0

@ StellarDoor5319この場合、アカウントのパラメータを直接変更することができます( 'GLOBAL'を削除してください)。 )CONVERT_TZ(field、 'GMT'、 'Europe/London') ' – FieryCat

+0

私は答えを更新しました;) – FieryCat

1

MySQLのリファレンスtimezone mentioned on their websiteは、どのように設定するかを示しています。

のmysql> SETのTIME_ZONE =タイムゾーン怠惰なもののために

+0

私のPHPスクリプトはすでに 'multi_query()'ステートメントの一部としてこのコマンドを実行しています。 MySQLの挿入は、その直後に実行されます。 – StellarDoor5319

関連する問題