0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQLで 'Asia/Tokyo' がUnknownになるときの解決法」

Posted at

【MySQL】Unknown or incorrect time zone: 'Asia/Tokyo' エラーの解決方法

🕒 はじめに

CakePHP や Laravel などのフレームワークで MySQL を利用していると、次のようなエラーに出会うことがあります。

SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: 'Asia/Tokyo'

これは「MySQLが Asia/Tokyo というタイムゾーンを知らない」ために発生します。
実は MySQL は OS のタイムゾーンを直接参照せず、独自の time_zone テーブルを使っています。そのため、必要なデータを流し込んであげる必要があります。


✅ 原因

  • Linux(OS) の date コマンドで JST になっていても、MySQL が内部にタイムゾーン情報を持っていないとエラーになる
  • Asia/Tokyo などのタイムゾーンは /usr/share/zoneinfo に存在するが、MySQL の mysql.time_zone* テーブルにロードされていない

✅ 解決方法

1. タイムゾーン情報を MySQL にロード

以下のコマンドを実行します:

sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -u root -p mysql

これで OS が持っているタイムゾーンデータを MySQL 内部に取り込みます。


2. 確認

MySQL にログインして確認してみます:

SELECT * FROM mysql.time_zone_name WHERE Name = 'Asia/Tokyo';

もしレコードが返ってくれば OK です。


3. MySQL を再起動

sudo systemctl restart mysql

4. 再実行

CakePHP などで再度クエリを実行すると、エラーが解消されているはずです。


✅ 補足

  • time_zone = SYSTEM の場合 → OS のタイムゾーンを参照
  • time_zone = 'Asia/Tokyo' の場合 → MySQL の time_zone テーブルに登録された値を参照

今回のエラーは後者の場合に発生します。


🎯 まとめ

  • MySQLは内部にタイムゾーン情報を持つ必要がある
  • Unknown or incorrect time zone エラーは mysql_tzinfo_to_sql で解決
  • 実行コマンドはこれだけ 👇
sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -u root -p mysql

これで安心して Asia/Tokyo を使えるようになります 🚀

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?