2017-01-24 4 views
2

として "IN" を比較し、なぜ私はこれらの文mysqlは同様

SELECT trasaction_id from transactions where transaction_id IN (886,654) 

を使用している場合、私は結果を期待して、次のデータを含むテーブルに

表取引

trasaction_id 
886 
456 
654_asd 
898_ASDF 

を持っていますbe 886

しかし、mysq返されます886,654_ASDF

なぜそのクエリで返されるのは654_ASDFですか?

+0

'trasaction_id' [原文]列の型がどのようなものです:

だから、ちょうど正しいタイプを使うのか? –

+3

''654_asd''はintに強制されます。 'SELECT 654 = '654_asd' == 1' –

答えて

4

transaction_idは文字列ですが、比較値は数値なので、これが発生しています。したがって、transaction_idは「サイレント変換」を使用して数値に変換されています。つまり、エラーは報告されません。

変換は実際にlikeを使用していません。数字のように見える場合は、文字列の先頭の文字を数字に変換します。サブシーケンス文字は無視されます。

SELECT trasaction_id 
FROM transactions 
WHERE transaction_id IN ('886', '654'); 
関連する問題