2010-09-10 65 views
1

我發現MySQL在INT列上搜索時返回奇數結果。在INT列上搜索返回錯誤結果

一個)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = '1' 

返回具有密鑰1.

b賣方)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = '1sdjhksadhak' 

返回賣方與鑰匙1

C)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = '1adlksajdkj187987' 
用鑰匙1

d

返回賣方)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = 'adlksajdkj187987' 

不返回任何東西。

爲什麼b和c會返回結果?如果有辦法使搜索嚴格?

回答

3

您正在對數字列進行比較。

要做到這一點,mySQL需要自動將字符串轉換爲數字。

鑄造過程使用任何可用於整數值的東西,從左側開始,並放棄其他所有東西。

這裏是突出了行爲的一個例子:

SELECT CAST('1adlksajdkj187987' TO unsigned) 

將返回1

最簡單的方法是不使用引號:

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = 1 

我想象MySQL將拋出一個錯誤在這裏如果運行在traditional mode.

MySQL的理論對於那些有興趣:

1

這可能是因爲您的seller_key列是數字類型。

所以當你使用'1''1sdjhksadhak''1adlksajdkj187987',它們都轉換爲數值。

0

seller_key是一個INT列,所以你應該使用:

SELECT * FROM sellers WHERE seller_key = 1與數值比較seller_key