2

ユーザーがコメントを投稿できるフォーラムがあります。コメントが作成されると、対応する日時の値が UTC 形式で保存されます。

データは現地時間で表示するつもりです。たとえば、「ASIA/SINGAPORE」とします。

2 つのオプション:

  1. convert_tzデータベースを照会するたびに使用します。私はこのアプローチが好きではありませんselect_expr。クエリを実行するたびに書き直す必要があるからです。
  2. 使用するSET time_zone = 'ASIA/SINGAPORE';

2 番目のオプションについては、コマンドの有効範囲を知りたいです (ここではスーパー特権はありません)。より具体的には、php アプリケーションを使用している場合、db 接続を閉じると構成が無効になりますか? データベースにクエリを実行するたびにコマンドを発行する必要がありますか?

Tnx。

4

1 に答える 1

3

MySQL 変数のスコープは接続内です (最下位レベル、libmysql <-> mysqld の間)。つまり、PHP 自体または一部のアプリケーション ライブラリが何らかの種類の mysql 接続プールを使用している場合、この変数が消えるのを観察でき (目に見えない接続切り替えのため)、変数は切断後に確実に消えます。

クエリの書き換えに満足できない場合は、適切な tz 名をオンザフライで選択できます。たとえば、次のように、ログに記録されたユーザーの ID を持っている限り、users テーブルを作成できます。

SELECT convert_tz( ..., ..., (select user_tz from users where user_id = ...))
于 2011-07-15T17:22:01.653 に答える