我见过一些程序员使用这个条件0='"="1'
并且不知道为什么它返回true?有人能解释一下吗?谢谢!
答案 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
时会被截断,从而导致零值。