MySQLセッションのタイムゾーンを設定しているPHPスクリプトがあります。私は出力をチェックして、正しくオフセットを送信しています。+1:00
(ヨーロッパ/ロンドン、DST)。しかし、私はデータベースに配置されているタイムスタンプを読むと、それは8時間遅れです。なぜこうなった?SQLは、PHPによって設定されたタイムゾーンよりも8時間遅い
MySQLサーバはタイムスタンプをデフォルト値として設定しています。
MySQLセッションのタイムゾーンを設定しているPHPスクリプトがあります。私は出力をチェックして、正しくオフセットを送信しています。+1:00
(ヨーロッパ/ロンドン、DST)。しかし、私はデータベースに配置されているタイムスタンプを読むと、それは8時間遅れです。なぜこうなった?SQLは、PHPによって設定されたタイムゾーンよりも8時間遅い
MySQLサーバはタイムスタンプをデフォルト値として設定しています。
データベースパラメータを更新します。リクエストで直接
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, ...
私は共有サーバー上にいるので、私は 'GLOBAL'を使う権利がありません。しかし、私は既に 'GLOBAL'なしで最初のコマンドを実行していますが、' +1:00'という値を渡しています。 – StellarDoor5319
@ StellarDoor5319この場合、アカウントのパラメータを直接変更することができます( 'GLOBAL'を削除してください)。 )CONVERT_TZ(field、 'GMT'、 'Europe/London') ' – FieryCat
私は答えを更新しました;) – FieryCat
MySQLのリファレンスtimezone mentioned on their websiteは、どのように設定するかを示しています。
のmysql> SETのTIME_ZONE =タイムゾーン怠惰なもののために
。
私のPHPスクリプトはすでに 'multi_query()'ステートメントの一部としてこのコマンドを実行しています。 MySQLの挿入は、その直後に実行されます。 – StellarDoor5319
「デフォルト値」は、サーバーの値です。サーバー上に設定されているタイムゾーンは何ですか? (コマンドラインで 'date'を使用するとタイムゾーンが表示されます) – aynber
@aynberこれは共有サーバーなので、コマンドラインにアクセスできません。 – StellarDoor5319