为什么将 varchar 与数值进行比较总是 return True?
Why does comparing a varchar to a numerical value always return True?
我在 MySQL(MySQL 服务器 5.7)中得到了以下 table:
CREATE TABLE IF NOT EXISTS SIMCards (
SIMCardID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
ICCID VARCHAR(50) UNIQUE NOT NULL,
MSISDN BIGINT UNSIGNED UNIQUE);
INSERT INTO SIMCards (ICCID, MSISDN) VALUES
(89441000154687982548, 905511528749),
(89441000154687982549, 905511528744),
(89441000154687982547, 905511528745);
我然后运行下面的查询:
SELECT SIMCardID FROM SIMCards WHERE ICCID = 89441000154687982549;
但是,它 returns 不是只返回相关行,而是返回所有这些行。如果我用引号将 ICCID 括起来,它就可以正常工作,例如:
SELECT SIMCardID FROM SIMCards WHERE ICCID = '89441000154687982549';
为什么第一个 SELECT 查询没有按预期工作?
MySQL 中的一个整数的最大值(无符号)为 4294967295
。您的 ID 远大于该数字。因此,如果您 select * 从您的数据库中使用整数,您的行为将是不确定的,因为您 select 所使用的数字不能用整数表示。
我不确定你为什么会得到你现在得到的结果,但我知道当你的数据不能用整数表示时,尝试用整数 select 肯定会不工作。
编辑以添加详细信息我忘记了:即使 MySQL 中的 bigint 也不足以表示您的 ID。所以你需要确保并始终使用字符串。
我在 MySQL(MySQL 服务器 5.7)中得到了以下 table:
CREATE TABLE IF NOT EXISTS SIMCards (
SIMCardID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
ICCID VARCHAR(50) UNIQUE NOT NULL,
MSISDN BIGINT UNSIGNED UNIQUE);
INSERT INTO SIMCards (ICCID, MSISDN) VALUES
(89441000154687982548, 905511528749),
(89441000154687982549, 905511528744),
(89441000154687982547, 905511528745);
我然后运行下面的查询:
SELECT SIMCardID FROM SIMCards WHERE ICCID = 89441000154687982549;
但是,它 returns 不是只返回相关行,而是返回所有这些行。如果我用引号将 ICCID 括起来,它就可以正常工作,例如:
SELECT SIMCardID FROM SIMCards WHERE ICCID = '89441000154687982549';
为什么第一个 SELECT 查询没有按预期工作?
MySQL 中的一个整数的最大值(无符号)为 4294967295
。您的 ID 远大于该数字。因此,如果您 select * 从您的数据库中使用整数,您的行为将是不确定的,因为您 select 所使用的数字不能用整数表示。
我不确定你为什么会得到你现在得到的结果,但我知道当你的数据不能用整数表示时,尝试用整数 select 肯定会不工作。
编辑以添加详细信息我忘记了:即使 MySQL 中的 bigint 也不足以表示您的 ID。所以你需要确保并始终使用字符串。