私の答えの残りの部分の前に、あなたがアプリケーションをUTCを使用するように変更するオプションがあれば、現在および将来の多くの悲しみを節約できることを今すぐお勧めしたいと思います。
あなたの質問の文脈を考えれば、私はこれがオプションではないと仮定しています。あなたは単にタイムゾーンを変更できる従来のサーバー環境でMySQLを使用するように設計されたシステムを採用しています。このタイムゾーンを予期し、UTCを使用するように簡単に適応できないコードロジックがあります。
しかし、実際にPSTとして保存する必要がある場合は、こちらをお読みください。あなたは、MySQLはデフォルトでタイムスタンプの保存用サーバーのタイムゾーンを使用することが正しいです
、インスタンスは自分のタイムゾーンは、彼らが起動されているAWSのリージョンに基づいて設定されているRDSしかしあなたの仮定が間違ってです - すべてRDSインスタンスは
The time zone is currently not modifiable. There is indeed a Parameter value in rds-describe-db-parameters
called "default_time_zone" but it's marked as not modifiable.
and this configuration can't be changed:は、だからあなたの唯一のオプションは、アプリケーションがPSTへのデータベース・インスタンスになります接続ごとにタイムゾーンを設定することで、UTCとして設定し、そのタイムゾーンで起動されています。あなたは、アプリケーションが2つの段階found hereに従うことによって行い、すべての接続で実行するSET SESSION time_zone = 'PST'
クエリを使用することができます。
(UTC-8はPST)で次のストアドプロシージャを作成します。
DELIMITER |
CREATE PROCEDURE mysql.store_time_zone()
IF NOT (POSITION('[email protected]' IN CURRENT_USER()) = 1) THEN
SET SESSION time_zone = '-8:00';
END IF
|
DELIMITER ;
接続
$ rds-modify-db-parameter-group PARAMGROUP --parameters "name=init_connect, value='CALL mysql.store_time_zone', method=immediate"
あなたはを付与する必要があります。あなたのインスタンスに、そして次のコマンドを実行します。データベースに接続するユーザーに件の権限は、そうしないと、接続エラーが出ることがあります。今
GRANT EXECUTE ON PROCEDURE mysql.store_time_zone TO 'user'@'host';
を任意のアプリケーション・ロジックを変更せずにPSTを使用する必要があります任意のクライアントであなたのRDSインスタンスに対して実行されるすべてのクエリ以前に保存されたタイムスタンプをデータベースに更新する必要はありません。
より良い解決策は、夏時間を処理するために名前付きのタイムゾーンを設定することです。私は行を次のように変更することを推奨します:SET SESSION time_zone = 'US/Pacific'; –
私は以前のコメントにストレスをかけたいと思っています。タイムゾーンという名前は、夏時間の節約に本当に苦労しています。夏時間のオフセットを保持していないので、GMTにも注意してください。 – Zavael
@ThomasPaineこのソリューションの私の唯一の恐れは、このデータベースに追加されたものは、このデータベース機能にアクセスする必要がありますか、それとも正しく機能しませんか?他のデータベースとそのユーザーはどうですか?このストアドプロシージャを使用してデータベースを作成し、誰かがデフォルトでアクセスできるようにすることはできますか? – Neo