2017-11-03 9 views
0

フィールドcookingMethodvarcharです。数値パラメータを渡すと:in(3,4)なぜこの結果が得られますか?数値/文字列を含むクエリのmysqlが予期しない結果を返します

SELECT distinct(cookingMethod) FROM recipe where cookingMethod in(3, 4); 

結果:[3][3,5][3,4][4][4,5]

enter image description here

と私は('3','4')を使用している場合、結果は唯一'3','4'のですか?

SELECT distinct(cookingMethod) FROM recipe where cookingMethod in('3', '4') 

結果:[3][4]

+0

ここであなたの問題は何ですか? –

+0

まだありません SELECT distinct(cookingMethod)FROM cms.recipe where cookingMethod = 3 結果:[3,1,5] [3,5] [3] – PercyQQ

答えて

1

あなたの2番目のクエリは単純であり、あなたは、文字列と文字列を比較しているため、期待される結果を返します。

最初のクエリでは、文字列との比較に数値を使用しています。 MySQLはフィールドの値を数値に変換して暗黙的に比較しようとします(他のデータベースではエラーが発生した可能性があります)。しかし、フィールドには数字とカンマの両方があるので、このクエリの目的で、MySQLはそれをカンマ区切りの数字リストでBLOBとして扱います。 IN演算子はカンマで区切られたリストを検索するため、コンマで区切られた数字のリスト内に3または4のいずれかのフィールドがすべて一致します。

関連する問題