Windows の MariaDB 10.4 でタイムゾーンをインポートする
はじめに
MariaDB にはタイムゾーンを設定する機能があります。下記のように指定するのですが、「Asia/Tokyo」など地域名で指定するためには、事前に「mysql」データベースの「time_zone」テーブルなどにデータをインポートしておく必要があります。
(下記はどちらも日本時間にするためのコードです)
MariaDB [sample]> SET time_zone = '+09:00';
MariaDB [sample]> SET time_zone = 'Asia/Tokyo';
インポートしていない場合は下記のようなエラーが出ます。
MariaDB [sample]> SET time_zone = 'Asia/Tokyo';
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Tokyo'
データのインポート方法は MariaDB のバージョンと、使用OSによって異なります。
今日は MariaDB 10.4 と Windows の場合のインポート方法をご紹介します。
1. バージョンの確認
MariaDB は MySQL 互換のデータベースで、インポートは MySQL と同じ方法で行います。
- Setting the Time Zone - Time Zones - MariaDB Knowledge Base
- https://mariadb.com/kb/en/library/time-zones/#setting-the-time-zone
Windows の場合は、タイムゾーン登録用の SQL ファイルをダウンロードして、それをインポートします。MySQL のバージョンが 5.6 以下 or 5.7 以上 でファイルが変わります。
下記ページによると、MariaDB 10.4 は MySQL 5.7 に対応するようです。
- Drop-in Compatibility of Specific MariaDB Versions - MariaDB versus MySQL - Compatibility - MariaDB Knowledge Base
- https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/#drop-in-compatibility-of-specific-mariadb-versions
2. ファイルのダウンロード
MySQL 5.7 用のファイルを使えば良いことは分かりましたが、下記 MySQL :: Time zone description tables のページをみると、さらに「POSIX standard」と「Non POSIX with leap seconds」の2種類のファイルが用意されています。
- MySQL :: Time zone description tables
- https://dev.mysql.com/downloads/timezones.html
POSIX は OS 用の規格で、leap seconds はうるう秒です。ページ下部にある各ファイルの説明によると、通常は POSIX を入れておけば大丈夫みたいです。
なので、今回は「The other set is for 5.7+」の下にあるtimezone_2019c_posix_sql.zip をダウンロードします。
3. インポート
ダウンロードした timezone_2019c_posix_sql.zip を解凍し、下記コマンドでインポートします。コマンド入力の際に、「mysql -u root -p mysql < 」まで入力して、コマンドのウィンドウに解凍した timezone_posix.sql をドラッグアンドドロップすると楽です。
> mysql -u root -p mysql < \path\to\timezone_posix.sql
- Populating the Time Zone Tables - MySQL :: MySQL 5.7 Reference Manual :: 5.1.12 MySQL Server Time Zone Support
- https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html#time-zone-installation
- Windows 用のインポート方法は、上記ページのちょっと下の方に書いてあります。
「Windows」でページ内検索すると見つけやすいです。 - Windows 用のインポート方法は、上記ページのちょっと下の方に書いてあります。
以上でタイムゾーンのインポートは完了です。
確認は下記コマンドで行えます。
MariaDB [sample]> SET time_zone = 'Asia/Tokyo';
Query OK, 0 rows affected (0.000 sec)
MariaDB [sample]> SHOW SESSION VARIABLES LIKE 'time_zone';
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| time_zone | Asia/Tokyo |
+---------------+------------+
1 row in set (0.001 sec)
4. おわりに
今日は MariaDB 10.4 でのタイムゾーンインポート方法をご紹介しましたが、この記事を読んでいただければ、他バージョンや MySQL での対応方法も自分で調べられると思います。
また、基本的には POSIX だけど、うるう秒に対応したファイルもあるという事ぐらいは覚えておくといいかもしれません。
そして、もし諸事情でタイムゾーンをインポートできない場合には、時間差を直接「+09:00」などのように指定すれば、同じ結果が得られます。いざというときに役立つので、頭の片隅に入れておくと良いと思います。