5

2週間後、タイムゾーンの問題に戸惑いました。ローカルホストではすべて正常に機能していますが、専用サーバーでは間違った値が返されます。私がこれまでに何をしたかを教えてください。

最初に以下のクエリでグローバルタイムゾーンを設定します:(ローカルホストとサーバーの両方でのスーパー特権)

 SET GLOBAL time_zone = '+00:00';

クエリの下で実行して、実行された内容をクロスチェックします

SELECT NOW(),@@global.time_zone AS gtz,@@session.time_zone AS stz,
       TIMEDIFF(NOW(), CONVERT_TZ( NOW() , @@session.time_zone ,  '+00:00' ) )
       AS OFFSET;

ただし、ローカルサーバーと専用サーバーでは異なる結果が表示されます

ローカルホスト(192.168.xx)のmysqlバージョン:5.5.8

+---------------------+--------+--------+----------+
| NOW()               | gtz    | stz    | OFFSET   |
+---------------------+--------+--------+----------+
| 2012-07-02 07:06:55 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+
1 row in set (0.00 sec)

専用サーバー(182.168.xx)のmysqlバージョン:5.1.53-log

+---------------------+--------+--------+----------+
| NOW()               | gtz    | stz    | OFFSET   |
+---------------------+--------+--------+----------+
| 2012-07-02 12:37:59 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+

私の質問は

タイムゾーンが+00:00に設定されているのに、NOW()が間違った時刻(上記はIST)を返すのはなぜですか

サイドノート :

以下のクエリを実行します

SHOW VARIABLES LIKE '%time%zone%';

ローカルホストで

+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | +00:00              |
+------------------+---------------------+

サーバー上

+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | GMT+5               |
| time_zone        | +00:00              |
+------------------+---------------------+

これは結果に影響しますか?また

以前のバージョンのmysqlにバグはありますか?

私を助けてください。

4

4 に答える 4

8

NOW()MySQLは、(および関連する関数を)呼び出すときに、コンピューターのシステムクロックをセッションタイムゾーンに変換します。

  • システムクロックがに設定され12:30+05:30、セッションのタイムゾーンが+00:00、の場合、結果はになります07:00

  • システムクロックがに設定され17:30+05:00、セッションのタイムゾーンが+00:00、の場合、結果はになります12:30

--timezoneただし、次のコマンドライン引数を使用することで、MySQLを「だまして」、システムクロックがオペレーティングシステムが信じているタイムゾーンとは異なるタイムゾーンにあると考えることができますmysqld_safe

  • システムクロックがに設定され17:30+10:30、セッションのタイムゾーンが+00:00であるが、システムクロックがであると理解されるように指定された方法でMySQLが開始された場合GMT+5、結果は上記の2番目の箇条書きと同じになります。

したがって、以下を確認する必要があります。

  1. システムクロックのタイムゾーンがsystem_time_zoneシステム変数で指定された値と一致すること(指定されていない場合は、--timezone引数を指定していないこと、mysqld_safeおよび呼び出さTZれたときに環境変数が設定されていないことを確認してください)。mysqld_safe

  2. システムクロックが指定されたタイムゾーンで正しい時刻を報告していること。

于 2012-07-02T08:20:37.130 に答える
3

システムのタイムゾーンを変更した後、mysqldを再起動する必要があります。

MySQLのグローバルタイムゾーンはシステムのタイムゾーンを取ります。システムのそのような属性を変更するときは、Mysqldを再起動する必要があります。

それでおしまい。

于 2014-04-01T04:10:33.463 に答える
0

1)必要に応じて、システムの時間とタイムゾーンを変更します。2)mysqlコンソールを開き、次のようにタイムゾーンを設定します。SET GLOBAL time_zone = "+04:00"; 3)mysqlを再起動します。

于 2013-07-04T06:57:23.143 に答える
-1

テストしました-SETtime_zone='+ 05:30'; 動作していますが、グローバル権限がないため、サーバー時間を+05:30-> SET GLOBAL time_zone ='+05:30'に設定してみてください。

于 2014-02-21T07:32:38.167 に答える