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

标签 mysql sql myisam

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

我的表具有以下架构。

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

我使用 MyISAM 作为存储引擎。

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

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

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字段进行比较吗?

最佳答案

返回

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

关于MYSQL 在将 0 与 varchar 字段进行比较时给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19312750/

相关文章:

c# - sql更新问题

sql - 使用 PowerShell 检查 SQL Server 中的行是否存在

mysql - MyISAM:如何在运行 DELETE 的情况下进行 SELECT 而无需锁定等待?

mysql - 如何在mysql数据库上使用sum函数连续设置一个值?

php - 有没有办法在删除行之前检查 MySql 中的约束违规情况?

sql - SQL 函数与代码函数的性能

mysql - 一个 MySQL 查询中的多个更新可以模拟事务行为吗?

mysql 数据库 innodb myisam 性能

php从下拉列表中插入查询枚举作为字符串

php - MYSQL IN 子句错误