だ。ログ。

開発とかスノボとかやきうとか。

(MySQLのバージョンの違いが)でたわね。

vagrantを利用したbent-centos7.2を使っているので稼働しているサーバーの関係でどうしても古いシステムにOSのバージョンや参照しているリポジトリの違いが出てしまう。

Field 'カラム名' doesn't have default value

本番では上手くいくが、自分の開発環境だと上手く登録できない事が発生した。
エラー文言は上記した通り、なにやら設定が入っていない事を怒られている。
しかし本番でinsert出来るのに、自分の環境だけはなぜ?って事を調べた際にMySQL5.6以降でのインストール時のデフォルト値が明示的なカラムへのNULL登録を宣言しない場合はエラーとして拒否する。と言うモードが働いてしまっているらしい。
言ってみれば、値を省略した形でいままで無意識に登録できていたけど、今後は明示的に宣言するなりサーバー側の設定変えるなりしてねって事で今の本番側にあわせる。

MySQLにroot権限なり管理権限でログインし

#現状の状態を確認
mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+

#値の設定
mysql> SET GLOBAL sql_mode=NO_ENGINE_SUBSTITUTION;
Query OK, 0 rows affected (0.00 sec)

#再確認
mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+

こんな感じになる。
No_ENGINE_SUBSTITUTIONになったら、詰まっているクエリ部分のロジックを動かすとデータの登録ができた。
やっぱり環境差異が出てしまってる事はよろしくない。
そして無意識的にこちらの環境が一方的にNGだった場合にハードウェア側かソフトウェア側かの問題切り分けが難しくなるので、エンジニアとしては肌感を養えるといいのかも。