數字比較怪癖:MySQL 令人驚訝的「字串」與0 評估
在MySQL 中,將「字串」與0 進行比較時會出現意外行為0. 雖然邏輯推理表明結果是錯誤的,但令人驚訝的是它得出了正確的結果。此異常源自於 MySQL 在比較過程中自動將字串轉換為數字。
如果字串以數字字元開頭,MySQL 會將其轉換為數值。但是,沒有數字前綴的字串將被視為 0。因此,「string」被強制轉換為 0,從而與 0 進行真正的比較。
此行為在字串列與0 進行比較的範例中很明顯:
select 'string' = 0 as res; -- res = 1 (true)
In相反,與其他數字(整數和小數)進行比較時,會如預期返回false:
select 'string' = -12 as res; -- res = 0 (false) select 'string' = 3131.7 as res; -- res = 0 (false)
但是,當字串與'0' 作為字串,結果為false:
select 'string' = '0' as res; -- res = 0 (false)
要強制轉換,可以使用 ' ' 等運算子:
select '0string' + 0 = 'string' AS res; -- res = 1 (true)
此查詢確保 '0string'求和之前先轉換為數字。隨後,「字串」也會轉換為數字,從而進行數字比較。
理解這種轉換行為對於避免 MySQL 查詢中出現意外結果至關重要。透過利用將字串明確轉換為數字的運算符,開發人員可以確保準確的比較並避免潛在的誤解。
以上是為什麼 MySQL 在數位比較中將「string」視為 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!