2015-11-05 36 views
2

我對MySQL並不陌生,但今天我的代碼中出現了一個奇怪的情況,這讓我很驚訝。有人可以解釋爲什麼這給了我相同的結果嗎?MySQL的自動字符串轉換爲where子句中的整數嗎?

SELECT * FROM `products` WHERE id = 12 

SELECT * FROM `products` WHERE id = '12ABC' 

在這兩種情況下,我與被選擇相同的記錄相同的結果。我希望第二個人能夠回報我什麼?我的ID字段是int(11)無符號且auto_increment標誌已打開。

回答

3

從MySQL文檔:

當操作者使用具有不同類型的操作數,類型轉換髮生,使操作數兼容

Documentation

因此,基本上,'12ABC'是鑄到12

+1

尊敬的領主:-)。這可以被禁用,或者我應該明確說不要轉換嗎? –

+0

@PrimozRome:似乎不可能抑制這種行爲。 – potashin

1

MySQL必須進行轉換才能在2種不同類型之間進行比較。它試圖將字符串設置爲一個int,並從頭開始從字符串中獲取數字。

它你不得不例如

'ABC12' 

字符串轉換爲int的結果將是0

相關問題