エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も

      2017/06/16

CakePHP3でタイムゾーンを指定する手順の解説

 

MySQLの日本時間対応は標準設定ではない

 
MySQLは、初期設定では日本時間に対応していませんので、日本時間に対応させるためには最初に設定を行っておく必要がある項目です。
 
Windows環境で使う XAMPPでは、対応されているバージョンもあるようですが、新しいバージョンでは自分で設定をする必要があるようです。
 
 

1.MySQLのタイムゾーンの設定の確認

 
まず始めに、MySQLにタイムゾーンの設定(「time_zone」テーブルの設定)がされているかを確認します。
 
 

MySQLの設定確認

 
MySQLに接続し、下記のコマンドを実行します。
 

 
コマンドラインで MySQLに接続してコマンドを実行する方法でもいいですし、phpMyAdminの SQL実行の画面に入力しても OKです。
 
MySQLのタイムゾーンの設定(「time_zone」テーブルの設定)は、「mysql」というデータベースの中に入っていますが、上記のコマンドはデータベースも指定していますので、データベース「mysql」に移動していなくても実行可能です。
 
 
実行の結果、下記の様に「返り値が空でした (行数 0)。」と出る場合は、「time_zone」(タイムゾーン)テーブルが空ですので、「time_zone」テーブルにデータを入れる作業を行います。
 
MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も
 
コマンドラインの場合は「Empty set (0.00 sec)」と出ます。
 
 
ちなみに、MySQLに接続するコマンドは、下記のとおりです。
 

 
 
「time_zone」テーブルの中身が空の場合は、「time_zone」にデータを入れる作業を行いますが、Windowsに構築した XAMPP環境と、Linux環境とでは作業内容が変わりますので、下記それぞれ確認してください。
 
 

Windowsの XAMPP環境の MySQLにタイムゾーンを設定する方法

 

2.タイムゾーンの SQL文ファイルのダウンロード

 
下記 URLからタイムゾーンを設定する SQLファイルをダウンロードします。
 https://dev.mysql.com/downloads/timezones.html
 
ダウンロードするファイルは、posixと書いてある SQLファイルです。ファイル名は定期的に更新されますが、下記のようなファイル名のものです。
 timezone_2017b_posix_sql.zip
 
MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も
 
 
ダウンロード後、展開して中にある SQLファイル「timezone_posix.sql」を取り出します。
 
 

3.timezone_posix.sqlを実行してインポート

 
展開して取り出した SQLファイル「timezone_posix.sql」をインポートします。
 
phpMyAdminにアクセスし、データベース「mysql」を選択し、インポート画面から SQLファイル「timezone_posix.sql」を選択し、インポートを実行します。
 
 
万一、データベース「mysql」以外のデータベースで「timezone_posix.sql」実行すると、下記のようなエラー画面が出ますので、間違ってインポートされることはほぼないと思います。
(「time_zone」というテーブルがあるデータベースだと上書きされてしまいますが...)
 
MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も
 
 
「timezone_posix.sql」のインポートは、phpMyAdminではなく、コマンドラインから実行することも可能です。
 
 
インポートした後は、レコードが追加されているか、確認をしておきましょう。
 
 
これで、Windowsの XAMPP環境への日本時間対応の「time_zone」対応は終了です。
 
 

Linux環境の MySQLにタイムゾーンを設定する方法

 

2.mysql_tzinfo_to_sqlコマンドを実行

 
Linuxの場合は、SQLの mysql_tzinfo_to_sqlコマンドを実行することで設定することができます。
 

 
 
上記コマンドは、MySQLに接続していない状態で実行します。
「|」の後ろで MySQLに接続しますので、上記コマンドを実行したのち、MySQLに接続するためのパスワードが求められます。
パスワードを入力すると、MySQLに接続し「time_zone」テーブルへのデータのインポートが実行されます。
 
実行後は、レコードが追加されているか、確認をしておきましょう。
 
 

タイムゾーンの設定ライブラリ /usr/share/zoneinfo/について

 
「/usr/share/zoneinfo/」は、GNU Cライブラリ(glibc)と言われる GNUプロジェクトによる標準 Cライブラリで、Linuxには標準で入っているライブラリです。
 
そのため、標準的なインストール方法でインストールした場合は「/usr/share/zoneinfo/」にありますが、カスタマイズしてインストールした場合などは違う場所にありますので、「ファイルがない」などのエラーが出る場合は、「zoneinfo」フォルダがある場所を確認してみてください。
 
また、Linuxには標準で入っているライブラリですが、Windowsの XAMPP環境では、GNU Cライブラリ(glibc)は用意されていませんので、タイムゾーンにレコードをインポートするには、MySQLのサイトから SQL文をダウンロードしてくる必要があるわけです。
 
 

CakePHP3の日付を指定する方法

 
この記事は、CakePHP3で日時を日本時間に合わせる方法の関連記事として書きましたが、その記事に関しては、下記を参照してください。
 CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
 
 

最後に覚書き

 
最後に覚書として書いておきます。
 
MySQLのシステム変数の値を表示する方法として「show variables」構文があります。
 
そして、システム変数の中にある「time_zone」の設定を確認する方法として、下記のコマンドがあります。
 

 - MySQL

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

MySQLのInnoDBでUniqueキーは最大767バイト

MySQLの Uniqueキーには InnoDBでは 767バイト、MyISAMでは 1000バイトの最大サイズの制限があります。

MySQLの「tinyint(1)」の悲劇 Boolean型になるとは...

MySQLで tinyint(1)を指定すると Boolean型を指定したことになります。意外な誤解があります。

Insert On Duplicate Key Update構文の使い方

レコードの有無で Insert、Updateを切り替える On Duplicate Key構文の使い方の説明です。

別サーバの MySQLにアクセスする設定・ファイアウォール設定、ポート設定、MySQL設定、テーブルへ権限付与の方法

外部サーバからアクセス方法解説。GRANTで権限付与。my.cnfのbind-addressで制限解除。3306ポートの開放、ファイアウォールの制限解除。確認方法と設定方法を詳細解説。

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。

MySQLの設定ファイル my.cnfがある場所と読み込み順序

MySQLの設定はmy.cnfファイルに記述されています。my.cnfを設置する場所は複数あり予め決められた順番で読み込み、その順番通りに設定内容が反映されます。