INT タイプの ID フィールドを持つテーブルがあります。
私はいくつかのデータ検証を行っており、それに気づきました
SELECT * from mytable where id=94
と
SELECT * from mytable where id='94'
完全に機能しますが、使用すると
SELECT * from mytable where id='94dssdfdfgsdfg2'
それは私に同じ結果を与えました!これはどのように可能ですか?
INT タイプの ID フィールドを持つテーブルがあります。
私はいくつかのデータ検証を行っており、それに気づきました
SELECT * from mytable where id=94
と
SELECT * from mytable where id='94'
完全に機能しますが、使用すると
SELECT * from mytable where id='94dssdfdfgsdfg2'
それは私に同じ結果を与えました!これはどのように可能ですか?
MySql の string to int 関数の内部実装が、解析時に最初の非数値の後の文字列からすべての文字を削除した場合に可能です。
あなたが目撃したのは「暗黙のデータ変換」と呼ばれています。
「明示的」の反対である暗黙的とは、可能な場合、データ型が比較対象の列のデータ型に自動的に変換されることを意味します。この場合、MYTABLE.id
はINTegerデータ型であるため、MySQLは、単一引用符で囲まれている場合、比較対象の値をINTに変換します(文字列ベースのデータ型をSQLに変換します)。
変換のため、データは文字列の左端の位置から開始した後、最後の数字の最後で切り捨てられます。