MariaDBで strict_mode をオフに。
たぶん最近のバージョンの MariaDB は、初期設定として strict_mode がオンになっている。と、どうなるかというと、例えば「デフォルト値を設定していないカラムに、値を指定せずにデータを挿入しようとする」場合などに「Field 'xxx' doesn't have a default value」というエラーが出る。
このエラーを回避するには:
…と、これが真っ当な対処法で、安全。
なのだけれど:
というときは、strict_mode を無効にすれば良い。データ運用の安全性の面からはお勧めされませんが。
まずは現在の状態を確認。ターミナルを開いて、
sudo mysql -e 'select @@GLOBAL.sql_mode;'
を実行。うちの環境では以下のような出力となりました。
+-------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+
この出力に "STRICT_TRANS_TABLES" とか "STRICT_ALL_TABlES" という文字列が含まれていれば、strict_mode(厳密モード)が有効になっています。
これを無効にするには、
- 上記出力(STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION)をコピーしておく。
- MariaDB の設定ファイル(うちの環境では /etc/mysql/mariadb.conf.d/50-server.cnf)をエディタで開く。
- [mysqld] セクションに以下の行:
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"を追加して保存。"" 内は、さっきコピーした文字列から STRICT_TRANS_TABLES や STRICT_ALL_TABLES を除いたもの。
- Mariadb を再起動。
sudo systemctl restart mariadb
さて、strict_mode が無効になったかチェックしてみましょ。
sudo mysql -e 'select @@GLOBAL.sql_mode;'
…を実行してみると、
+-----------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-----------------------------------------------------------------------+
| ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-----------------------------------------------------------------------+
| ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------+
良さそうです。

コメント