2

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

SELECT column 
  FROM table 
 WHERE column = "+"

列类型是 VARCHAR。

4

3 回答 3

1

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

要解决它,请尝试:

WHERE column = '0' 
于 2013-07-25T14:16:42.383 回答
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)
于 2013-07-25T14:23:06.087 回答
0

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

于 2013-07-25T14:30:49.297 回答