私の回答の残りの部分の前に、UTC を使用するようにアプリケーションを変更するオプションがあれば、現在および将来の多くの悲しみを救うことをお勧めしたいと思います。
ただし、質問のコンテキストを考えると、これはオプションではなく、タイムゾーンを変更できる従来のサーバー環境でMySQLを使用するように設計されたシステムを適応させており、コードロジックがあると想定していますはこのタイムゾーンを想定しており、UTC を使用するように簡単に適応させることはできません。
ただし、PST として保存する必要がある場合は、読み進めてください。
mySql がデフォルトでタイムスタンプ ストレージにサーバーのタイムゾーンを使用することは正しいですが、RDS インスタンスが起動される AWS リージョンに基づいてタイムゾーンが設定されているという仮定は正しくありません。すべての RDS インスタンスはタイムゾーンが次のように設定されて起動されます。 UTC であり、この構成は変更できません。
タイムゾーンは現在変更できません。確かにrds-describe-db-parameters
「default_time_zone」というパラメーター値がありますが、変更不可としてマークされています。
したがって、唯一のオプションは、アプリケーションがデータベース インスタンスに対して行う各接続のタイムゾーンを PST に設定することです。ここSET SESSION time_zone = 'PST'
にある 2 つの手順に従って、アプリケーションが作成するすべての接続でクエリを実行できます。
次のストアド プロシージャを作成します (UTC-8 は PST)。
DELIMITER |
CREATE PROCEDURE mysql.store_time_zone ()
IF NOT (POSITION('rdsadmin@' 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"
データベースに接続するユーザーにアクセス許可を付与する必要がある場合がありEXECUTE
ます。そうしないと、接続エラーが発生する可能性があります。
GRANT EXECUTE ON PROCEDURE mysql.store_time_zone TO 'user'@'host';
これで、クライアントが RDS インスタンスに対して実行するすべてのクエリで、アプリケーション ロジックを変更したり、データベースに以前に保存されたタイムスタンプを更新したりすることなく、PST を使用する必要があります。