2013-08-13 36 views
21

私はCONVERT_TZの機能を使用できるように、私は(それがUnbuntu上で実行されている)私のMySQLインスタンスにタイムゾーンをロードしようとしていますが、私は、以下のコマンドを実行したとき:タイムゾーンを読み込めませんか?

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 

を私は次の出力を取得したときにI

警告:タイム ゾーンとして 'を/ usr/share/zoneinfoの/アジア/ Riyadh87' をロードできません。それだけで、まだNULL返しCONVERT_TZを使用するようにしてください。それをスキップします。警告: '/ usr/share/zoneinfo/Asia/Riyadh88'をタイムゾーンとしてロードできません。それをスキップします。 警告: '/ usr/share/zoneinfo/Asia/Riyadh89'を時刻 ゾーンとして読み込めません。それをスキップします。警告:タイムゾーンとして '/ usr/share/zoneinfo/Mideast/Riyadh87'を読み込むことができません。それをスキップします。 警告: '/ usr/share/zoneinfo/Mideast/Riyadh88'をゾーン ゾーンとして読み込むことができません。それをスキップします。警告:タイムゾーンとして '/ usr/share/zoneinfo/Mideast/Riyadh89'を読み込むことができません。それをスキップします。 警告: '/usr/share/zoneinfo/iso3166.tab'を時間帯 ゾーンとして読み込めません。それをスキップします。警告: '/ usr/share/zoneinfo/posix/Asia/Riyadh87'をタイムゾーンとしてロードできません。それをスキップします。 警告: '/ usr/share/zoneinfo/posix/Asia/Riyadh88'を タイムゾーンとしてロードできません。それをスキップします。警告:タイムゾーンとして '/ usr/share/zoneinfo/posix/Asia/Riyadh89'を読み込むことができません。それをスキップします。 警告: '/ usr/share/zoneinfo/posix/Mideast/Riyadh87' をタイムゾーンとして読み込むことができません。それをスキップします。警告:タイムゾーンとして '/ usr/share/zoneinfo/posix/Mideast/Riyadh88'を読み込むことができません。 をスキップします。警告:タイムゾーンとして '/ usr/share/zoneinfo/posix/Mideast/Riyadh89'を読み込むことができません。 をスキップします。警告: '/ usr/share/zoneinfo/right/Asia/Riyadh87' をタイムゾーンとしてロードできません。それをスキップします。警告: '/ usr/share/zoneinfo/right/Asia/Riyadh88'をタイムゾーンとしてロードできません。それをスキップします。 警告: '/ usr/share/zoneinfo/right/Asia/Riyadh89'を タイムゾーンとしてロードできません。それをスキップします。警告: '/ usr/share/zoneinfo/right/Mideast/Riyadh87'をタイムゾーンとしてロードできません。 をスキップします。警告: '/ usr/share/zoneinfo/right/Mideast/Riyadh88'をタイムゾーンとしてロードできません。 をスキップします。警告: '/ usr/share/zoneinfo/right/Mideast/Riyadh89'をタイムゾーンとしてロードできません。 をスキップします。警告: '/usr/share/zoneinfo/zone.tab'を時間帯 ゾーンとして読み込めません。それをスキップします。

これはなぜ起こっているのでしょうか?

PS:

私は日付時刻を変換するには、次の方法を使用しています:

CONVERT_TZ(NOW(),'UTC', 'PCT') 

は、それは私がちょうど間違って変換することだし、それがNULL結果の原因であることは可能ですか?

+0

パイプラインの最初のコマンドである 'mysql_tzinfo_to_sql'スクリプトは、' mysql'に直接パイプしないと、大きな醜い.sqlファイルを出力します。そのファイルはどのように見えますか?サウジアラビアの歴史的なタイムゾーンデータが必要ですか? –

+0

いいえ、基本的にはUTCからPSTに変換するだけです。私はあなたが私に大きな醜いSQLスクリプト全体を投稿したくないと思っています。 .sqlファイルで探しているはずのものがありますか? –

答えて

23

これはDebianの上リヤド*のタイムゾーンファイルのバグです:

http://bugs.mysql.com/bug.php?id=20545

推奨される回避策は、(あなたはもちろんのこれらのタイムゾーンを必要としない場合)、単に警告を無視することです。

mysql_tzinfo_to_sql /usr/share/lib/zoneinfo | mysql -uroot --force mysql 

--forceオプションを使用してTZデータをインポートした後、CONVERT_TZを使用できるようになります。私が今行ったことの転記です:

sh$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p mysql --force 2> /dev/null 
Enter password: ******** 
sh$ mysql -p 
Enter password: ******** 
Server version: 5.1.49-3 (Debian) 

mysql> select convert_tz(now(), 'UTC', 'CET'); 
+---------------------------------+ 
| convert_tz(now(), 'UTC', 'CET') | 
+---------------------------------+ 
| 2013-08-13 21:04:34    | 
+---------------------------------+ 
1 row in set (0.00 sec) 
+1

情報ありがとうございます。私はインストールが必要なものはすべて持っていたようですが、PST8PDTではなくPSTに変換していたのでヌルになっています... –

+3

@AbeMiessler:D TZ名が疑わしい場合は、mysqlに問い合わせることができます。クイックチェックのために「time_zone_name」を使用します。あなたの特定の場合: 'mysql.time_zone_nameから名前を選択してください。 '%PST%'; –

1

残念ながら、シルヴァンの解決策は私のために働いていませんでした。

私の開発用コンピュータ(Windows上)のPHPMyAdminからテーブルをエクスポートし、作成スクリプトをちょっと微調整することで、本番サーバのタイムゾーンテーブルを作成することができました。

スクリプトが長すぎて投稿で共有できないため、Googleドライブでスクリプトをホストします。

(剥奪新しい行とコメント付き)スクリプトをインストール:コメント

https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing

スクリプトを:

https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing

は、コメントなしのバージョンを使用してください。コメント版の実行には約5分かかりますが、削除されたバージョンの実行には5秒未満が必要です。

注::これが動作するには、おそらくrootとして実行する必要があります。

関連する問題