为什么 MySQL 查询总是返回表中的所有列数据?:
SELECT column
FROM table
WHERE column = "+"
列类型是 VARCHAR。
因为您与0
(整数)进行比较,所以列值在比较之前转换为整数。因此,所有这些值都将是0
,除非它们包含可以转换为不同整数值的字符串(如'1'
)。
要解决它,请尝试:
WHERE column = '0'
好的,在澄清您的查询后,发生了什么事情就更清楚了。在 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)
MySql 在将 varchar 与整数进行比较时,尝试将 varchar 转换为整数。如果字符串不是数字,则默认情况下将其转换为整数 0,因此在与 0 比较时返回 true。例如,如果有一列为“123”,则不会选择它。