【问题标题】:MYSQL is giving strange results while comparing the 0 with varchar fieldMYSQL 在比较 0 和 varchar 字段时给出奇怪的结果
【发布时间】:2013-10-19 05:10:33
【问题描述】:

我知道将数字与 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 字段?

【问题讨论】:

  • 在比较 varchar 时需要添加引号,除非得到不想要的结果

标签: mysql sql myisam


【解决方案1】:

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

It is clearly described in the manual

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

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

【讨论】:

  • 我知道要么我需要强制转换它要么使用'',但我只想知道mysql返回结果与预期不同的原因。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 2019-10-26
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多