[解決済み】MySQLの現在のタイムゾーンを取得する方法は?
質問
MySQLにそのような関数があるかどうか、どなたかご存知ですか?
アップデイト
これは有効な情報を出力しません。
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
あるいは、MySQL 自身が正確な
time_zone
を使うことができます。
PHP
のように、有効な情報を得ることができるのであれば、ここで。
SYSTEM
...
解決方法は?
マニュアルより( セクション9.6 ):
グローバルタイムゾーンとクライアント固有のタイムゾーンの現在値は、次のように取得できます。
mysql> SELECT @@global.time_zone, @@session.time_zone;
編集
上記は
SYSTEM
は、MySQL がシステムのタイムゾーンを使用するように設定されている場合、これはあまり役に立ちません。PHPを使用しているので、もしMySQLからの答えが
SYSTEM
であれば、システムにタイムゾーンを問い合わせることができます。
それは
を使用しています。
date_default_timezone_get
. (もちろん、VolkerK が指摘するように、PHP は別のサーバで動作しているかもしれませんが、仮定として、Web サーバとその通信相手である DB サーバが
に設定されています。
[実際にそうでない場合
で
同じタイムゾーンではありません。
巨大
を跳ぶ)。しかし、(MySQL と同様に) PHP が使用するタイムゾーンを設定することができることに注意しましょう (
date_default_timezone_set
)、OSが使用している値とは異なる値を報告する可能性があることを意味します。PHPのコードを制御しているのであれば、そのようなことをしていても大丈夫なのかがわかるはずです。
しかし、MySQL サーバがどのタイムゾーンを使用しているかという質問全体は、余談かもしれません。 全く何もない は、データベースのデータに関するものです。詳しくはこちらをご覧ください。
さらなる議論 :
サーバーを制御している場合は、もちろんタイムゾーンが既知であることを確認することができます。もしあなたがサーバーを制御できないのであれば、使用するタイムゾーンを 接続 このように
set time_zone = '+00:00';
これにより、タイムゾーンが GMT に設定され、それ以降の操作(たとえば
now()
) は GMT を使用します。
ただし、時刻と日付の値は ではなく は、MySQL にタイムゾーン情報とともに保存されます。
mysql> create table foo (tstamp datetime) Engine=MyISAM;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into foo (tstamp) values (now());
Query OK, 1 row affected (0.00 sec)
mysql> set time_zone = '+01:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+02:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 | <== Note, no change!
+---------------------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 10:32:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 08:32:38 | <== Note, it changed!
+---------------------+
1 row in set (0.00 sec)
つまり、サーバーのタイムゾーンを知ることが重要なのは、次のような、今現在の時刻を取得する関数の場合のみです。
now()
,
unix_timestamp()
データベースデータの日付がどのタイムゾーンを使用しているかについては、何も教えてくれません。例えば
とする
サーバーのタイムゾーンを使用して書き込まれたものですが、その仮定には欠陥がある可能性があります。データに保存されている日付や時刻のタイムゾーンを知るには、タイムゾーン情報とともに保存されていることを確認するか、(私のように)常にGMTで保存されていることを確認する必要があります。
なぜ、データがサーバーのタイムゾーンを使用して書き込まれたと仮定すると欠陥があるのでしょうか?一つには、データが異なるタイムゾーンを設定した接続を使って書き込まれた可能性があるからです。データベースがあるサーバーから別のサーバーに移動し、そのサーバーが異なるタイムゾーンにある可能性もあります(私は、テキサスからカリフォルニアに移動したデータベースを引き継いだときに、このような事態に遭遇しました)。しかし
としても
サーバーに書き込まれたデータは、現在のタイムゾーンのままでは、まだ曖昧なままです。昨年、アメリカでは11月1日の午前2時にサマータイムがオフになりました。私のサーバーがカリフォルニアで太平洋時間帯を使用していて、次のような値を持っているとします。
2009-11-01 01:30:00
をデータベースに登録します。それはいつのことでしょうか?11月1日PDT午前1時30分でしょうか、それとも11月1日PST午前1時30分(1時間後)でしょうか?まったく知る由もありません。教訓:日付や時刻は常にGMT(サマータイム適用なし)で保存し、必要なときに必要なタイムゾーンに変換する。
関連
-
コマンドでmysqlに接続中、'mysql'が内部または外部コマンドとして認識されない エラーは解決されました。
-
[解決済み] Error Dropping Database (Can't rmdir '.test', errno: 17)
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] JavaScriptでクライアントのタイムゾーン(およびオフセット)を取得する
-
[解決済み] MySQL JDBC ドライバ 5.1.33 - タイムゾーンの問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQLユーザーDBにパスワードカラムがない - OSXへのMySQLインストール
-
[解決済み】カラムのデータが切り捨てられた?
-
[解決済み】mysqld_safe UNIX ソケットファイル用のディレクトリ '/var/run/mysqld' が存在しません。
-
[解決済み] MySql テーブル、エラー#1064 & エラー#1068 複数の主キーが定義されている [終了] 。
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] MySQLクエリ GROUP BY 日/月/年
-
[解決済み] WindowsでMySQLの画面コンソールをクリアする方法は?
-
[解決済み] SQLSTATE[22003]: 数値の範囲外: 1264 範囲外の値です。
-
[解決済み] dpkg: error processing package mysql-server (dependency problems)?
-
[解決済み] MySQL のタイムゾーンは UTC に設定する必要がありますか?