タイムゾーン
【環境】
MySQL: 5.7.18
-> 8.0.18
MySQL: 5.7.18
-> 8.0.18
経緯
CakePHP3 を利用しているときに、下記エラーが出た。
SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: ‘Asia/Tokyo’
調べてみると、MySQL のタイムゾーン設定がなされていないとのこと。
mysql データベースを見ると、確かに空っぽだった。
select * from mysql.time_zone;
Empty set (0.00 sec)
手順
Linux 環境
コマンド
mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql -p
Enter password:
Warning: Unable to load '/usr/share/zoneinfo//iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone1970.tab' as time zone. Skipping it.
結果
3つ位失敗したみたいだけど、無事にタイムゾーンが mysql データベース time zone name テーブルへ登録された♪
select * from mysql.time_zone;
+--------------+------------------+
| Time_zone_id | Use_leap_seconds |
+--------------+------------------+
| 1 | N |
| 2 | N |
| 3 | N |
__ snip __
| 1778 | Y |
| 1779 | Y |
| 1780 | Y |
+--------------+------------------+
1780 rows in set (0.00 sec)
Windows 環境
SQL 入手
MySQL Community Downloads Time zone description tables
から、MySQL 5.7+ 用の timezone_2019c_posix_sql.zip を DL。
SQL 実行
上記ファイルを解凍して出てきたファイルを、C ドライブ直下へ配置して実行。
mysql -u root -p mysql < c:\timezone_posix.sql
確認
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
を更新してから
show variables like '%time_zone';
+------------------+------------+
| Variable_name | Value |
+------------------+------------+
| system_time_zone | |
| time_zone | Asia/Tokyo |
+------------------+------------+
2 rows in set, 1 warning (0.01 sec)
参考サイト
有限会社 エス技研:MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も(2017-06-16)
→Linux 環境について、参考にさせていただきました
Pentec:MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する
→Windows 環境について、参考にさせていただきました