例えば:
テーブル :user
列 : user_id
(型は int)
SELECT * FROM user WHERE user_id = '10xyz'
の同じ結果を出している
SELECT * FROM user WHERE user_id = '10'
入力値は整数ではありませんが、この場合はエラーになりません。
同じ結果が得られる理由は、文字列から末尾の文字をMySQL
自動的に削除し、暗黙的に整数に変換するためです。
すべてのコードを変更したくないが、データベース クエリがすべて 1 つまたはいくつかのサブルーチンを通過している場合は、ステートメント ハンドル (例: if ( $sth->{mysql_warning_count} ) ...
) を使用した後に警告をチェックするようにそれらを変更できます。
または、警告をエラーに昇格させて、自動的にそれを行う DBI サブクラスを作成することもできます。もしそうなら、他の多くの人がそのようなことを利用しています。「10xyz」のようなものを整数フィールドに更新または挿入するときに、警告の代わりにエラーを与える構成設定がありますが、それよりも広いものはありません。親愛なる Oracle はそれをNot a Bugと見なします。たぶん、MariaDBはより良い(またはできる)のでしょうか?
データベース内の user_id のデータ型は INT です
そのため、エラーではなく同じ出力が得られる理由