2

MySQL クエリが常にテーブルからすべての列データを返すのはなぜですか?:

SELECT column 
  FROM table 
 WHERE column = "+"

列の型は VARCHAR です。

4

3 に答える 3

1

わかりました、クエリを明確にした後、何が起こったのかが少し明確になりました。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)
于 2013-07-25T14:23:06.087 に答える
1

0(整数)と比較するため、列の値は比較の前に整数に変換されます。したがって、これらの値はすべて0、別の整数値 ( など) に型キャストできる文字列が含まれていない限り、 になります'1'

それを解決するには、試してください:

WHERE column = '0' 
于 2013-07-25T14:16:42.383 に答える