NULL
で作成されたフィールドに MySQL で を挿入できるようになったとき、私は非常に驚きましたNOT NULL
。私はいくつかの調査を行い、厳密モードを有効にする方法を発見しました。ただし、MySQLSTRICT_ALL_TABLES
が有効になっているときにどのような検証が行われるかはよくわかりません。
マニュアルには次のように書かれています。
Strict モードは、MySQL が無効または欠落している入力値を処理する方法を制御します。値が無効になる理由はいくつかあります。(私の強調)たとえば、列のデータ型が間違っているか、範囲外である可能性があります。
欠けていると見なされるものと、それをどのように処理するかを理解しています。何を無効と見なすのかは不明です。いくつかのテストを行ったところ、次のことがわかりました。
- 長すぎる文字列は無効です
- 範囲外の数値は無効です
NULL
非NULL
列の s は無効ですTRUE
常に有効でFALSE
あるように見えます (それぞれ 1 と 0 になります)- 無効な日付は無効です
- ゼロの日付は有効です (この動作を変更するために追加のモードを有効にすることができます)
- 整数フィールドの浮動小数点数は有効です (丸められます)
- 数値フィールドの文字が無効です
MySQL は上記以外の検証チェックを行いますか?
マニュアルには「列のデータ型が間違っている」と書かれていますが、これが実際に機能する唯一の状況は、数値フィールドの文字です。データ型エラーの他の例はありますか?
MySQLが実行する正確なチェックのリストはどこかにありますか?
編集:記録のために、私のアプリケーションはすでに広範な検証を行っています。私は最後のチャンス、念のためのチェックとして厳密モードを使用しています。何かをチェックするのを忘れた場合、「黙ってデータを壊す」のではなく、すぐに失敗することを望みます。