1

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

我有以下架构的表。

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

我将 MyISAM 作为存储引擎。

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

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

SELECT * FROM user where number=0

但它返回数字字段包含字符串值(如“signup”)或数字字段为空的所有行。

虽然如果我运行以下查询..

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

他们没有返回任何行,因为没有一行在其数字字段中具有 1 或 97654 值。

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

4

2 回答 2

2

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

于 2013-10-11T07:42:05.243 回答
2

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

说明书上写的很清楚

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

SELECT * FROM user where CAST(`number` AS SIGNED) = 1
于 2013-10-11T07:43:23.693 回答