| この記事の要点 |
|---|
|
MariaDBの現在日時を取得する関数です。以下の2017年の出力は当時の例として残しています。返る日付・時刻は実行時点と接続のタイムゾーンで変わり、毎回同じ値になるものではありません。後半ではMariaDB 11.4系とMySQL 8.0で確認した実行例を追加します。
現在日時を取得する構文
//現在日付の取得関数
CURRENT_DATE
//現在時刻の取得関数
CURRENT_TIME
//現在日時の取得関数
CURRENT_TIMESTAMP
元の実行例
> SELECT CURRENT_DATE;
+--------------+
| CURRENT_DATE |
+--------------+
| 2017-07-07 |
+--------------+
1 row in set (0.01 sec)
> SELECT CURRENT_TIME;
+--------------+
| CURRENT_TIME |
+--------------+
| 05:56:18 |
+--------------+
1 row in set (0.00 sec)
> SELECT CURRENT_TIMESTAMP;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2017-07-07 05:56:18 |
+---------------------+
1 row in set (0.00 sec)
日付・時刻・日時の使い分け
| 必要な値 | 関数 | 注意 |
|---|---|---|
| 日付 | CURRENT_DATE / CURDATE() | 時刻を含まない |
| 時刻 | CURRENT_TIME / CURTIME() | 日付を含まない |
| 日時 | CURRENT_TIMESTAMP / NOW() | セッションのタイムゾーンで返る |
| UTCの日時 | UTC_TIMESTAMP() | 表示・保存先の変換規則も確認 |
| 小数秒付き日時 | NOW(6) | 小数秒6桁。保存先にも対応する精度が必要 |
CURRENT_TIMESTAMPは現在日時を返す関数名です。TIMESTAMPというカラム型を使わなければ呼べない、という意味ではありません。同じSQL文のNOW()等は文の開始時点を基準にするため、処理途中で待機しても呼出しごとに時計が進むとは限りません。
値が9時間ずれるときの確認
まず実際に使うアプリのDB接続で以下を確認します。別クライアントの確認だけでは、アプリ接続にも同じ設定が使われているとは限りません。すべてSELECTで、データや設定を変更しません。
SELECT VERSION() AS db_version,
@@session.time_zone AS session_time_zone,
@@global.time_zone AS global_time_zone,
@@system_time_zone AS system_time_zone;
SELECT CURRENT_DATE AS current_date_value,
CURRENT_TIME AS current_time_value,
CURRENT_TIMESTAMP AS current_timestamp_value,
NOW(6) AS current_timestamp_microseconds,
UTC_TIMESTAMP() AS utc_timestamp_value;@@session.time_zoneはこの接続の設定です。SYSTEMならシステムのタイムゾーンに依存します。アプリやOSの時計・タイムゾーン設定とDB接続の設定を混同しないでください。今回の検証ではセッション+00:00から+09:00へ変えるとNOW()が9時間進み、UTC_TIMESTAMP()は同じUTC時刻でした。
TIMESTAMPとDATETIMEの違いを検証する
以下は隔離した学習用DB専用です。 新規テーブルを作り1行挿入するので、読み取り確認SQLとは別です。本番や既存テーブルで実行せず、example_clockという名前が未使用の使い捨てDBで確認します。SET SESSIONはこの接続だけを変え、アプリの別接続やサーバー全体の設定を変えるものではありません。
SET SESSION time_zone = '+00:00';
CREATE TABLE example_clock (
id INT PRIMARY KEY,
created_ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),
created_dt DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)
);
INSERT INTO example_clock (id) VALUES (1);
SELECT id, created_ts, created_dt FROM example_clock ORDER BY id;
SET SESSION time_zone = '+09:00';
SELECT id, created_ts, created_dt FROM example_clock ORDER BY id;最初のSELECTはUTCで、次は+09:00で同じ行を読みます。TIMESTAMPは保存/取得時のセッション換算があり、表示が9時間変わりました。DATETIMEは入力された日時の値を保持し、この切替では表示が変わりませんでした。DATETIMEにどのタイムゾーンの値を入れるかはアプリ側で設計します。
確認した結果の例
テストでは時刻を固定して比較しました。以下の2026-01-01は再現用の値で、通常実行時の現在日時ではありません。
| 読取セッション | created_ts | created_dt |
|---|---|---|
| +00:00 | 2026-01-01 00:00:00.000000 | 2026-01-01 00:00:00.000000 |
| +09:00 | 2026-01-01 09:00:00.000000 | 2026-01-01 00:00:00.000000 |
DEFAULTと更新日時の注意
上の例はDEFAULT CURRENT_TIMESTAMP(6)を明示し、INSERTで日時カラムを省略して値を入れています。明示的に別の日時やNULLを渡す場合とは区別してください。DEFAULTは新規行の既定値で、更新のたびに自動で現在時刻になる設定ではありません。ON UPDATEの要否は別に設計し、SHOW CREATE TABLEで実定義を確認します。
旧版・サーバー設定によってTIMESTAMPの暗黙の既定値が違う場合があるため、省略時の自動動作に依存せず、型・DEFAULT・NULL・ON UPDATEを確認してください。日時の値域やタイムゾーン名の利用にも製品・版・設定の差があります。Asia/Tokyoなどの名前を使う場合はタイムゾーン情報の導入状況も確認します。
アプリへ組み込む前の確認
- 日時の基準をUTCか業務タイムゾーンか決め、DB接続・保存型・表示側で統一する。
- 日付境界と小数秒、保存後の再取得を確認する。現在日時の文字列だけを見て型やタイムゾーンを断定しない。
- DB側で生成した時刻とアプリ側で生成した時刻を混ぜる場合は、時計・タイムゾーンの違いを確認する。
- 設定変更後は新規接続や接続プールも含めて有効値を確認する。別クライアントでのSETだけではアプリは直らない。
今回はMariaDB 11.4.13 / MySQL 8.0.46の隔離したローカルDBで、掲載SELECT、UTC/+09の違い、同一文のNOW(6)の安定性、DEFAULTによる挿入、TIMESTAMP/DATETIMEの再取得を確認しました。本番DBの設定・スキーマ・業務データは変更していません。旧MariaDB全版や実アプリ全体の動作保証ではありません。
公式資料: MariaDB NOW、MariaDB TIMESTAMP、MariaDB DATETIME、MySQL 8.0の日時関数、MySQLの日時型(2026年10月確認)。
子ページはありません
- 現在日時の取得
- replaceによる文字列置換
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38