为什么这个条件0 ='= 1'是真的?

时间:2014-02-10 14:24:06

标签: mysql

我见过一些程序员使用这个条件0='"="1'并且不知道为什么它返回true?有人能解释一下吗?谢谢!

2 个答案:

答案 0 :(得分:4)

为了将数字与字符串进行比较,将字符串强制转换为数字。

当将字符串转换为数字时,mysql接受所有前导数字并抛弃其余数字。如果没有前导数字,则将字符串转换为零:

0 = 'abc' -- true: string cast to 0
1 = '1abc' -- true: string cast to 1

您的字符串被评估为0,因为没有前导数字。

答案 1 :(得分:1)

该问题与"不寻常"无关。看起来像是字符串。是。它只是原始的隐式类型转换。你可以这样做:

mysql> select 0='blablabla';
+---------------+
| 0='blablabla' |
+---------------+
|             1 |
+---------------+
1 row in set, 1 warning (0.00 sec)

看到你的理由:

mysql> show warnings;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'blablabla' |
+---------+------+-----------------------------------------------+
1 row in set (0.00 sec)

与您的'"="1'相同 - 它只是字符串,在转换为DOUBLE时会被截断,从而导致零值。