これはばかげているように聞こえますが、使用すると
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
NULL を出力します。私は Ubuntu 12.04 64 ビットで MySQL Workbench を使用していますが、他のラップトップ/OS でも動作します (MySQL Workbench も使用しています)。
これはばかげているように聞こえますが、使用すると
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
MySQL 固有の構成データを保持する組み込みデータベースの名前です。
マンププロ
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/
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
エラーが発生した場合は、httpsdata too long for column 'abbreviation' at row 1
://bugs.mysql.com/bug.php?id=68861 を参照してください。
修正は、次を実行することです
これにより、mysql モードを無効にし、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
Mac OS Catalina で XAMPP を使用する場合、
ターミナルの /Applications/XAMPP/xamppfiles/bin フォルダーに移動し、以下を実行します。
./mysql_tzinfo_to_sql /usr/share/zoneinfo | sed -e "s/ローカル タイム ゾーンを設定する必要があります。zic のマニュアル ページを参照してください/local/" | ./mysql -u root mysql
これは私にとってはうまくいきました。