MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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ファイルのスクリーンショット例は以下の通りです。

MySQLのNOW()・CURDATE()関数でUTCを使用する方法

設定ファイルに以下の記述を追加してください。

[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への設定追加をおすすめします。

  1. MySQLのSELECTクエリでエイリアス(別名)を使う方法をわかりやすく解説

    MySQLのSELECTクエリでエイリアスを使うには?MySQLでは、カラムやテーブルに別名(エイリアス)を設定する際にASキーワードを使用します。エイリアスを使うと、出力結果のカラム名を分かりやすい名前に変更できるため、レポート作成やアプリケーションでのデータ表示に非常に便利です。この記事では、実際にサンプルテーブルを作成し、SELECTクエリでエイリアスを設定する手順を順番に解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテスト用のテーブルを作成しましょう。mysql> create table DemoTable ( Name varchar(

  2. MySQLでCURDATE()とLIKE句を使った部分一致検索の方法

    MySQLにはCONTAINS()という名前の関数は存在しません。そのため、現在の日付(CURDATE())に関連する文字列で部分一致検索を行いたい場合は、CONCAT()関数とLIKE句を組み合わせる方法が有効です。本記事では、実際にサンプルテーブルを作成しながら、その手順を順番に解説していきます。現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。mysql> select curdate();実行結果は以下の通りです。+------------+ | curdate() | +------------+ | 2019-11-28 | +----