2017-07-04 233 views
0

我有在MySQL下表(MySQL服务器5.7):为什么比较varchar和数值总是返回True?

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

字符串比较与数字比较不同。如果您希望以某种方式进行比较,则需要专门键入将值转换为varchar或int或其他值。 –

回答

3

MySQL中的整数具有最大值(无符号)4294967295。你的ID大大超过这个数字。因此,如果您通过整数从数据库中选择*,您的行为将不确定,因为您选择的数字不能用整数表示。

我不确定为什么你会得到你所得到的结果,但我知道,当你的数据不能用整数表示时,试图用一个整数来选择将无法工作。

编辑以增加细节我忘记了:即使MySQL中的bigint也不足以代表您的ID。所以你需要确保并始终使用字符串。

相关问题