2017-07-04 232 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。所以你需要確保並始終使用字符串。

相關問題