convert_tzはnullを返します


92

これは愚かに聞こえることは知っていますが、

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time

NULLを出力します。Ubuntu 12.04 64ビットでMySQL Workbenchを使用していますが、他のラップトップ/ OSでも動作します(これもMySQL Workbenchを使用しています)。

回答:


171

これは、タイムゾーンテーブルをmysqlにロードしていない場合に発生します。

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

1
MySqlが起動するたびに、これを1回だけ実行する必要がありますか?
安倍ミースラー2013

3
一度だけ。それは情報をテーブルにMySQLにロードし、それはそれ以降使用されます。
Barmar 2013

2
forceフラグを使用して、発生したエラーを上書きすることもできます。mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
scum

3
MySQLデーモンを有効にする前に、それも再起動する必要がありました(Debian上)。
Ekster 14

2
こんにちは、このコマンドを実行すると、次のようなエラーが発生しました。スキップします。警告:「/usr/share/zoneinfo/zone.tab」をタイムゾーンとして読み込めません。スキップします。
Ghanshyam Katriya、2015年

26

受け入れられた回答(MySQLの開発サイトでも同じ)でコマンドを実行した後、コマンドが次のようなタイムゾーン間で変換できなかった理由を理解しようとしばらく時間を費やした後、このスレッドを見つけました

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time

これは、OS X上の2つのファイルが問題を引き起こすことがあることが判明:/usr/share/zoneinfo/Factory/usr/share/zoneinfo/+VERSION

修正... /usr/share/zoneinfo/.bak/コマンドを許可するなど、これらのファイルを一時的に別の場所に移動する

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

予想されるすべてのタイムゾーン情報を完全に入力します。

これは、MySQLのインストール済みバージョンのバグである場合とそうでない場合があります。

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper

私はまた、 STRICT_MODEます。

いずれにせよ、これで修正を探している人にとっていくつかの頭痛が軽減されることを願っています。


13

Windows環境とは別に、次の方法でタイムゾーンを設定できます。

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

Windows環境で、

1. download Time zone description tables from http://dev.mysql.com/downloads/timezones.html

2. Stop MySQL server

3. Put then inside Mysql installation package (つまり、C:\ Program Files \ MySQL \ data \ mysql) `

4. Start MySQL server

..あなたの仕事は終了しました。

それでもNULLCONVERT_TZ これらのデータベーステーブルをダウンロードしてmysqlデータベースに挿入する必要がある場合は、http: //www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

今、あなたは問題が解決されます.. :)



2

MAMP PRO

  1. 開いた Terminal
  2. cd /usr/share/zoneinfo/
  3. sudo mv +VERSION ~/Desktop
  4. cd /applications/MAMP/Library/bin
  5. sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
  6. sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/

これは、バイナリフォルダーの場所を除いて、一般的にmacOSに適用されます。ありがとう!
コロネルクリック

2

1)Windowsでは、C:\Program Files\MySQL\他の回答のようにデータフォルダーはありません。

2)その場合は、を探しますC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql。通常、このフォルダは非表示になっているため、表示されない場合がありますC:\ProgramData\

3)ここで説明されているように、[表示]タブの[設定]を変更して、隠しファイルとフォルダを表示します。https://irch.info/index.php?pg = kb.page&id = 133

4)Windowsの[スタート]ボタンで「サービス」を検索して、MySQLサービスを停止します。

5)次に、timezone_2017c_posix.zipを解凍し、その中のファイルをコピーします(ファイルを直接コピーし、フォルダー全体をコピーしないでください)。 C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6)MySQL 5.7の場合、timezone_2017c_posix.zipは解凍後に.sqlファイルを提供するだけで、問題を解決しない可能性があります。MySQL 5.7を実行している場合でも、5.6のzipファイルをダウンロードして、それらのファイルをC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7)MySQLサーバーを再起動します。CONVERT_TZ()が機能しているかどうかを確認するには、このSQLクエリを実行します。

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); null以外の出力を確認します。


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

エラーが発生した場合は、httpsdata too long for column 'abbreviation' at row 1//bugs.mysql.com/bug.php?id = 68861を参照してください。

修正は次を実行することです

これは、mysqlモードを無効にし、mysqlが切り捨てられたデータを挿入できるようにする行を追加します。これは、mysqlが末尾にnull文字を追加するmysqlのバグが原因でした(上記のリンクによる)。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
(if the above gives error "data too long for column 'abbreviation' at row 1")
mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/zut.sql

echo "SET SESSION SQL_MODE = '';" > /tmp/mysql_tzinfo_to.sql
cat /tmp/zut.sql >> /tmp/mysql_tzinfo_to.sql

mysql --defaults-file=/etc/mysql/my.cnf --user=verifiedscratch -p mysql < /tmp/mysql_tzinfo_to.sql

私はOSX El Capitanを持っていますが、これが機能するための唯一の答えです。将来の参照用:私の場合、エラーは次のように述べています:「データが長すぎます。注:他の回答で言及されているファイルの(sudo)mkdirまたは(sudo)mvを実行しようとすると、すべて「アクセスが拒否されました」
hepabolu

ところで、MySQLを再起動する必要はありませんでした。
hepabolu 2017年

1

これらは、WindowsでMySQL 5.7を使用している場合に機能させるための手順です。

  1. マイコンピュータ/コンピュータ/このPCまたはOSの名前を右クリックして、[プロパティ]を選択します。
  2. 左側のパネルから[システムの詳細設定]を選択します。
  3. 「環境変数」を選択し、MySQL binディレクトリの完全なパス名を入力します(通常はC:\ Program Files \ MySQL \ MySQL Server 5.7 \ binにあります)。
  4. cmdプロンプトを開き、を使用してmysqlに入力しますmysql -u root -p password
  5. use mysqlMySQL DBを選択するために入力します。
  6. https://dev.mysql.com/downloads/timezones.htmlからファイル「timezone_YYYYc_posix_sql.zip」をダウンロードします(YYYYの代わりに、そのページで使用可能な最大年を2017や2018のように置き換えます)
  7. それを抽出し、テキストエディターでファイルを開きます。
  8. 内容をコピーして、cmdプロンプトで実行します。

正常に完了するCONVERT_TZと、その他のタイムゾーン機能を使用できるようになります。


0

Mac OS CatalinaでXAMPPを使用する場合、

ターミナルの/ Applications / XAMPP / xamppfiles / binフォルダーに移動し、以下を実行します。

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s /ローカルタイムゾーンを設定する必要があります-zicマニュアルページ/ local /を参照してください" | ./mysql -u root mysql

これでうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.