これは馬鹿げているように聞こえますが、
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
nULLを出力します。 Ubuntu 12.04 64ビットでMySQL Workbenchを使用していますが、他のラップトップ/ OSでも動作します(MySQL Workbenchも使用)。
これは、タイムゾーンテーブルをmysqlにロードしていない場合に発生します。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
このスレッドは、受け入れられた回答(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
でも運営しています。
いずれにせよ、この修正により修正プログラムを探している人にとっては頭痛の種がいくつか減ることを願っています。
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
..作業は終了しました。
それでもNULL
for CONVERT_TZ
を取得している場合は、これらのデータベーステーブルをダウンロードしてmysqlデータベースに挿入してください http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
今、あなたの問題は解決されます.. :)
WindowsでMySqlを使用している場合、タイムゾーンデータをmysqlスキーマにロードする必要があります。ここに良いHOWTOがあります: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
これを行わないと、関数CONVERT_TZは入力タイムゾーン(例: 'UTC'、 'Asia/Jakarta')を認識せず、単にNULLを返します。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
エラーが発生した場合はdata too long for column 'abbreviation' at row 1
次に参照してください: https://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
これらは、WindowsでMySQL 5.7を使用している場合に機能させるための手順です。
mysql -u root -p password
を使用してmysqlに入ります。use mysql
と入力して、MySQL DBを選択します。正常に完了すると、CONVERT_TZ
およびその他のタイムゾーン関数を使用できるようになります。
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=1
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以外の出力を確認します。
MAMP PRO
Terminal
を開きますcd /usr/share/zoneinfo/
Sudo mv +VERSION ~/Desktop
cd /applications/MAMP/Library/bin
Sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
Sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/