MySQL クエリが常にテーブルからすべての列データを返すのはなぜですか?:
SELECT column
FROM table
WHERE column = "+"
列の型は VARCHAR です。
わかりました、クエリを明確にした後、何が起こったのかが少し明確になりました。MySQL では+
、連結演算子ではなく、数値演算子のみです。数値以外の文字列は常にゼロにキャストされるため、2 つの空の文字列 (一重引用符のペア) を一緒に "追加" しようとすると、事実上0 + 0
.
MySQL> SELECT 1 + 1, '' + '', '1abc' + 1;
+-------+---------+------------+
| 1 + 1 | '' + '' | '1abc' + 1 |
+-------+---------+------------+
| 2 | 0 | 2 |
+-------+---------+------------+
1 row in set, 1 warning (0.00 sec)
また、数値以外の文字列はゼロにキャストされるため、列内の数値以外の文字列は、次のように条件に効果的に一致します。
WHERE column = 0
ゼロを数値および非数値文字列と比較する例:
MySQL> SELECT 'abcd' = 0, '1234' = 0;
+------------+------------+
| 'abcd' = 0 | '1234' = 0 |
+------------+------------+
| 1 | 0 |
+------------+------------+
1 row in set, 1 warning (0.00 sec)
0
(整数)と比較するため、列の値は比較の前に整数に変換されます。したがって、これらの値はすべて0
、別の整数値 ( など) に型キャストできる文字列が含まれていない限り、 になります'1'
。
それを解決するには、試してください:
WHERE column = '0'