在将0与varchar字段进行比较时,MYSQL给出了奇怪的结果

时间:2013-10-11 07:37:25

标签: mysql sql myisam

我知道它的愚蠢想法可以与VARCHAR字段进行比较而我不应该比较它,但我只是想要了解原因。

我正在使用以下架构的表。

Table: user
--------------------
number varchar(24)

我将MyISAM作为存储引擎。

数字字段包含混合数据,即数字(如'9999999')和字符串(如'注册')。

我正在尝试运行以下查询。

SELECT * FROM user where number=0

但它返回所有行,其中number字段包含字符串值,如'signup'或在数字字段中为空。

如果我运行以下查询..

SELECT * FROM user where number=1 or SELECT * FROM user where number=97654

它们没有返回任何行,因为该行的数字字段中没有任何一行具有1或97654值。

有人可以帮我理解mysql如何将0与varchar字段进行比较吗?

2 个答案:

答案 0 :(得分:2)

返回

注册其他空值,因为 MySQL会将字符串隐式转换为整数。当字符串无效或无法转换为int时,该值为0,这就是它返回的原因。

答案 1 :(得分:2)

它返回数字不可转换为数字的所有条目,或者是字符串“0”。这是因为比较事先将varchar转换为int,这导致值为0.

It is clearly described in the manual

对于实际比较,您可以使用以下查询

SELECT * FROM user where CAST(`number` AS SIGNED) = 1