データベース

MySQLで「TIMESTAMP with implicit DEFAULT value is deprecated.」が出力されたときの対処法

更新日:

MySQLサーバーのバージョン5.6をインストールしたあとの初回起動時に次の警告メッセージが出力されました。

# service mysqld start
Initializing MySQL database:  2017-07-15 08:45:09 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
...

この警告について調べてみましたので紹介します。

「TIMESTAMP with implicit DEFAULT value is deprecated.」の警告について

警告の内容は「暗黙のデフォルト値を持つTIMESTAMPは非推奨になった。--explicit_defaults_for_timestampサーバーオプションを使ってね。詳細はドキュメントを見てね。」と言うことなのでドキュメントを当たって見ました。

マニュアルを確認してみると、TIMESTAMPデータ型は非標準的な方式だったので、MySQL 5.6.6以降では非推奨となりこの警告が出るとのこと。そして、この非標準の動作をオフにするには、新しいexplicit_defaults_for_timestampシステム変数を起動時に有効しておけばよいらしい。

非推奨と言うことで将来バージョンアップした時に問題がでるかもしれないので、マニュアルに書いてある通りexplicit_defaults_for_timestampシステム変数を有効にしておいた方が無難な気がします。データも空っぽですし。

explicit_defaults_for_timestampシステム変数を有効にする

現在の設定を確認するにはmysqlクライアントでMySQLサーバーに接続して以下のコマンドを実行します。

mysql> show variables like 'explicit_defaults_for_timestamp';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF   |
+---------------------------------+-------+
1 row in set (0.00 sec)

やっぱりオフになってますね。

起動時に有効にするにはオプションファイルで指定するのが簡単で確実だと思います。オプションファイルmy.cnfを編集して[mysqld]セクションに「explicit_defaults_for_timestamp = true」を追加します。

[mysqld]
...
explicit_defaults_for_timestamp = true
...

MySQLサーバーを再起動すれば設定は完了です。

-データベース

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.