| この記事の要点 |
|
エラー内容
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
「暗黙の DEFAULT 値を持つ TIMESTAMP は非推奨です。--explicit_defaults_for_timestamp サーバーオプションを使ってください」という意味です。MySQL 5.6 以降の mysqld 起動時に、エラーログ(/var/log/mysqld.log など)や systemctl status mysqld の出力に表示されます。
発生条件と原因
MySQL には、TIMESTAMP 型の列について標準 SQL とは異なる古い独自の動作があります。explicit_defaults_for_timestamp が OFF の場合、テーブル作成時に次のような設定が暗黙に付きます。
- テーブルの最初の TIMESTAMP 列に DEFAULT や ON UPDATE を書かないと、自動的に
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPが付く - NULL を明示的に許可していない TIMESTAMP 列は自動的に NOT NULL になる
- 2 つ目以降の TIMESTAMP 列には
'0000-00-00 00:00:00'が既定値として付く - NOT NULL の TIMESTAMP 列に NULL を INSERT すると、エラーではなく現在時刻が入る
MySQL 5.6.6 でこの動作は非推奨になり、標準的な動作に切り替える explicit_defaults_for_timestamp が追加されました。ただし互換性のため 5.6・5.7 の既定値は OFF のままなので、何も設定しないと起動のたびに「旧仕様のまま動いています」という警告が出ます。MySQL 8.0 では既定値が ON に変わりました。
対処法
1. 設定ファイルに追記する
my.cnf の [mysqld] セクションに次の 1 行を追加します。設定ファイルの場所は環境によって異なります。
| 環境 | 主な場所 |
|---|---|
| CentOS / RHEL 系 | /etc/my.cnf |
| Ubuntu / Debian(MySQL 公式パッケージ) | /etc/mysql/mysql.conf.d/mysqld.cnf など /etc/mysql/ 配下 |
| Windows | MySQL のデータディレクトリ等にある my.ini |
[mysqld]
explicit_defaults_for_timestamp = 1
2. MySQL を再起動する
# CentOS 7 以降 / Ubuntu など systemd の環境(サービス名は mysqld または mysql)
sudo systemctl restart mysqld
再起動後にエラーログを確認し、警告が出なくなっていれば完了です。
設定を変える前の注意点
この設定は警告を消すだけでなく、TIMESTAMP 列の動作そのものを変えます。既存のアプリケーションへの影響を確認してから適用してください。
- 既存テーブルの定義はそのまま: 作成済みのテーブルには、作成時に付いた DEFAULT や ON UPDATE がすでに保存されているため、設定を変えても定義は変わりません。影響を受けるのは主に、これから作る(作り直す)テーブルです
- NULL の INSERT がエラーになる: NOT NULL の TIMESTAMP 列に NULL を入れて「現在時刻を入れてもらう」書き方をしているアプリは、ON にすると現在時刻が自動では入らなくなり、通常は「Column cannot be null」などのエラーになります
- 新規テーブルでは既定値を明示する: 作成日時・更新日時の列は、次のように明示的に書きます
CREATE TABLE article (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
このように明示しておけば、explicit_defaults_for_timestamp が ON でも OFF でも同じ動作になり、MySQL 8.0 への移行時にも困りません。
確認方法
-- 現在の設定値(ON なら 1)
SHOW VARIABLES LIKE 'explicit_defaults_for_timestamp';
-- テーブルに実際に付いている既定値を確認
SHOW CREATE TABLE article;
SHOW CREATE TABLE の結果に DEFAULT CURRENT_TIMESTAMP などが表示されていれば、その列の既定値は保存済みです。
よくある質問
警告を無視しても動作に問題はない?
警告なので、MySQL 5.6・5.7 で使い続ける限りは動作に影響しません。ただし旧仕様に依存したままだと、MySQL 8.0 へ移行したときに挙動が変わります。早めに設定を ON にし、テーブル定義で既定値を明示しておくのが安全です。
MariaDB でも同じ設定がある?
MariaDB にも同名の変数がありますが、既定値はバージョンによって異なります。SHOW VARIABLES で現在の値を確認してから判断してください。
関連
- MySQL/MariaDB 初期設定 (my.cnf) 完全ガイド
- MySQL の現在設定を確認するコマンド一覧(SHOW VARIABLES / STATUS / INNODB STATUS)
- MySQLの起動、停止、再起動(CentOS, Ubuntu)
- MySQL バージョン確認方法完全ガイド
- ALTER TABLE カラム定義変更完全ガイド (MySQL/PG/Online DDL)
子ページはありません
- 1071 Specified key was too long; max key length is 767 bytes
- ERROR 1063 (42000): Incorrect column specifier for column '~'
- mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)
- Install/Remove of the Service Denied!
- Datetime 型が NULL に見える
- Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
- ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- Exception: Wrong MySQL configuration
- [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
- ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- Incorrect column specifier for column 'カラム名'
- BLOB/TEXT column 'description' used in key specification without a key length
- ERROR: /bin/sh: mysql_config: コマンドが見つかりません
- Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
- CSVエクスポート時に「ERROR 1045 (28000): Access denied for user 'username'@'localhost'」エラーが表示される
- Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT
- SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ~
人気ページ
- 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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09