NULL制約を設定している文字列タイプのカラムにNULLを保存しようとした場合、エラーにならず、空文字("")が挿入される。NULL制約を設定していても、NULL値を保存する際にエラーにならない場合が存在します。これは無効データの制約による影響です。無効データの制約についてMySQLは無効または不適切なデータ値を許容しており、これらを有効な値に強制的に変更する。NULL制約を設定している文字列タイプのカラム(char型)にNULLを保存しようとした場合、保存は中止されず空文字("")が挿入されます。数値タイプ(int型の)のであれば、数値の0が挿入されます。NULL値が保存されそうになったら保存を中断したいという意図で設定していたのであれば、その通りの挙動にはなりません。対策1:アプリケーション側でバリデーションを設定アプリケーション側のモデルやフロントにNULL値を許容しないバリデーションを設定しておくことで、NULL値の保存が許容されることを防ぐことが出来ます。いずれかあるいは両方が有効な状態を表します。STRICT_TRANS_TABLESは、値を指定したとおりにトランザクションテーブルに挿入できない場合、ステートメントを中止します。非トランザクションテーブルの場合、値が単一行ステートメントで発生するか、複数行ステートメントの先頭行で発生した場合、ステートメントを中止します。STRICT_ALL_TABLESは、カラムに不正な値を挿入したときに、警告ではなくエラーを返します。システム変数を設定します。権限が必要で、この設定はその時点以降に接続するすべてのクライアントの動作に影響します。変数を設定すると、現在のクライアントにのみ影響します。値を確認するには、次のステートメントを使用します。自動テストの拡充を進める中で、テストは通っているが、意図通りの挙動になっていないシステムテストがいくつか見つかった。メールアドレスの入力フォームに不正な値が入力された場合、正常にリダイレクトされるかチェックするテストでは、リダイレクト先の見出しが表示されているかでチェックを行っていた。見出しだけでチェックを行うと、メールアドレス以外の箇所でエラーが発生したとしても、テストは通ってしまう。テストコードが意図通りの挙動になっていなかったとしても、機能に悪影響が出るわけでは無いので、気を付けないと見逃してしまう危険性があると改めて感じた。意図通りの挙動になっていなければ、せっかくテストコードを拡充しても無意味に終わってしまうので、対策を講じていきたい。テストコードを実装する際は、実際の画面を触るなどしながら、意図した通りの挙動をテスト出来ているか十分に注意して進めたい。現状モデルやリクエストでも十分テスト出来るが、システムに寄せてしまっている箇所もいくつかある。当初、開発速度を優先して、システムのみ実装していたことで、役割ごとに分けられていなかった。このあたりも含め、テストコード全体の設計を見直す必要性があると感じている。日)IBMのWatsonきっかけでエンジニアに憧れて28歳未経験でWebエンジニアへ転職。2018年12月から3年間で「10000時間」をプログラミングに捧げる計画を立て、学んだことをブログの投稿中。Activitiesryoutakuこのサイトについてプライバシーポリシ。