为什么将varchar与数值进行比较总是返回True?

时间:2017-07-04 15:04:01

标签: mysql varchar

我在MySQL(MySQL Server 5.7)中有下表:

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;

但是,它不是只返回相关的行,而是返回所有这些行。如果我用引号括住ICCID,它就可以正常工作,例如:

SELECT SIMCardID FROM SIMCards WHERE ICCID = '89441000154687982549';

为什么第一个SELECT查询不能按预期工作?

1 个答案:

答案 0 :(得分:3)

MySQL中的整数的最大值(无符号)为4294967295。您的ID远远大于该数字。因此,如果您通过整数从数据库中选择*,则您的行为将是未定义的,因为您选择的数字不能用整数表示。

我不确定你为什么会得到你得到的结果,但我确实知道当你的数据不能用整数表示时尝试用整数选择肯定不会起作用。

编辑以添加我忘记的细节:即使是MySQL中的bigint也不足以代表您的ID。因此,您需要确保并始终使用字符串。