MySQLのNOW()・CURDATE()関数でUTCを使用する方法
はじめに
MySQLのNOW()やCURDATE()関数は、デフォルトではサーバーのシステムタイムゾーンに基づいた値を返します。これらの関数の結果を協定世界時(UTC)に統一したい場合は、設定ファイル「my.cnf」(Windows環境ではmy.iniの場合もあります)を編集するのが確実な方法です。
手順1:データディレクトリの場所を確認する
まず、次のクエリを実行して、設定ファイルが配置されているデータディレクトリの場所を確認しましょう。
mysql> SELECT @@datadir;
実行結果は以下のようになります。
+---------------------------------------------+ | @@datadir | +---------------------------------------------+ | C:\ProgramData\MySQL\MySQL Server 8.0\Data\ | +---------------------------------------------+ 1 row in set (0.00 sec)
手順2:my.cnfファイルにタイムゾーンの設定を追加する
上記のクエリで表示されたパスへ移動し、「my.cnf」ファイルを開きます。Windowsシステムでのmy.cnfファイルのスクリーンショット例は以下の通りです。

設定ファイルに以下の記述を追加してください。
[mysqld_safe] timezone = UTC
このオプションは「mysqld」セクションの下に配置します。一度「my.cnf」ファイルに記述しておけば、ページが読み込まれるたびに何度も書き直す必要はありません。以降のすべてのページロードに対して自動的に設定が適用されます。
手順3:MySQLサーバーを再起動する
設定ファイルの変更内容を反映させるには、MySQLサーバーの再起動が必要です。再起動後は、NOW()やCURDATE()が常にUTCの時刻・日付を返すようになります。
現在のタイムゾーンを確認する方法
設定が正しく反映されているかどうかは、次のクエリで確認できます。
mysql> SELECT @@global.time_zone, @@session.time_zone;
タイムゾーンがUTCに設定されていれば、日時関数の戻り値もUTCになります。
代替方法:SET time_zoneでセッション単位に設定する
設定ファイルを編集せずに、各ページで次のクエリを実行する方法もあります。
mysql> SET time_zone = '+0:00'; Query OK, 0 rows affected (0.00 sec)
この方法でも、現在のセッションのタイムゾーンをUTC(+00:00)に切り替えることができます。ただし、ページが読み込まれるたびに毎回クエリを実行する必要があるため、パフォーマンスや保守性の面からあまり良い習慣とは言えません。恒久的にUTCを使用したい場合は、前述のmy.cnfへの設定追加をおすすめします。
-
MySQLのSELECTクエリでエイリアス(別名)を使う方法をわかりやすく解説
MySQLのSELECTクエリでエイリアスを使うには?MySQLでは、カラムやテーブルに別名(エイリアス)を設定する際にASキーワードを使用します。エイリアスを使うと、出力結果のカラム名を分かりやすい名前に変更できるため、レポート作成やアプリケーションでのデータ表示に非常に便利です。この記事では、実際にサンプルテーブルを作成し、SELECTクエリでエイリアスを設定する手順を順番に解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテスト用のテーブルを作成しましょう。mysql> create table DemoTable ( Name varchar(
-
MySQLでCURDATE()とLIKE句を使った部分一致検索の方法
MySQLにはCONTAINS()という名前の関数は存在しません。そのため、現在の日付(CURDATE())に関連する文字列で部分一致検索を行いたい場合は、CONCAT()関数とLIKE句を組み合わせる方法が有効です。本記事では、実際にサンプルテーブルを作成しながら、その手順を順番に解説していきます。現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。mysql> select curdate();実行結果は以下の通りです。+------------+ | curdate() | +------------+ | 2019-11-28 | +----