为什么MySQL查询总是返回表中的所有列数据?:
SELECT column
FROM table
WHERE column = "+"
列类型为VARCHAR。
答案 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”,则不会选中它。