查询始终返回所有数据

时间:2013-07-25 14:13:31

标签: mysql sql

为什么MySQL查询总是返回表中的所有列数据?:

SELECT column 
  FROM table 
 WHERE column = "+"

列类型为VARCHAR。

3 个答案:

答案 0 :(得分:1)

因为您与0(整数)进行比较,所以在比较之前将列值转换为整数。所有这些值都将为0,除非它们包含可以被类型化为不同整数值的字符串(如'1')。

要解决此问题,请尝试:

WHERE column = '0' 

答案 1 :(得分:1)

好的,在澄清你的查询之后,发生的事情会更清楚一些。在MySQL中,+只是一个数字运算符,而不是连接运算符。非数字字符串将始终转换为零,因此如果您尝试将两个空字符串(单引号对)“添加”在一起,则实际上是在选择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)

答案 2 :(得分:0)

将varchar与整数进行比较的MySql尝试将varchar转换为整数。如果字符串不是数字,则默认情况下会转换为整数0,因此与0比较时返回true。例如,如果列中的列为“123”,则不会选中它。