挿入クエリを実行すると、列user_name
とbranch
列に空の文字列が挿入されます。これを再現できました。
このクエリを実行して、null 以外の列を明示的に null に設定すると、エラーが返されます。
INSERT INTO student( name, user_name, branch ) VALUES ( 'harjeet', null, null )
Data Type Default Valuesについては、MySql 5.0 リファレンスを参照してください。
MySQL 5.0.2 以降、カラム定義に明示的な DEFAULT 値が含まれていない場合、MySQL は次のようにデフォルト値を決定します。
列が値として NULL を取ることができる場合、列は明示的な DEFAULT NULL 句で定義されます。これは 5.0.2 以前と同じです。
列が値として NULL を使用できない場合、MySQL は明示的な DEFAULT 句を使用せずに列を定義します。例外: 列が PRIMARY KEY の一部として定義されているが、NOT NULL として明示的に定義されていない場合、MySQL はそれを NOT NULL 列として作成します (PRIMARY KEY 列は NOT NULL でなければならないため) が、暗黙的なデフォルトを使用して DEFAULT 句を割り当てます。価値。これを防ぐには、PRIMARY KEY 列の定義に明示的な NOT NULL を含めます。
明示的な DEFAULT 句を持たない NOT NULL 列へのデータ入力の場合、INSERT または REPLACE ステートメントに列の値が含まれていないか、UPDATE ステートメントが列を NULL に設定する場合、MySQL は有効な SQL モードに従って列を処理します。時間:
厳密な SQL モードが有効になっている場合、トランザクション テーブルでエラーが発生し、ステートメントがロールバックされます。非トランザクション テーブルの場合はエラーが発生しますが、複数行ステートメントの 2 行目以降で発生した場合は、前の行が挿入されています。
厳密モードが有効になっていない場合、MySQL は列を列データ型の暗黙的なデフォルト値に設定します。
したがって、MySql で厳密モードが有効になっていないようです。列の暗黙のデフォルト値varchar
は空の文字列であるため、それが使用されます。エラーを返したい場合は、文字列モードをオンにします。