所以我們只是說我有一個表,只有一個ID是一個整數。我發現運行:MySQL整數比較忽略尾隨alpha字符
SELECT *
FROM table
WHERE ID = '32anystring';
返回id = 32的行。顯然32!='32anystring'。
這似乎很奇怪。它爲什麼這樣做?它可以關閉嗎?什麼是最好的解決方法?
所以我們只是說我有一個表,只有一個ID是一個整數。我發現運行:MySQL整數比較忽略尾隨alpha字符
SELECT *
FROM table
WHERE ID = '32anystring';
返回id = 32的行。顯然32!='32anystring'。
這似乎很奇怪。它爲什麼這樣做?它可以關閉嗎?什麼是最好的解決方法?
在將字符串轉換爲數字時,在大多數編程語言中將常用行爲解釋爲數字。
有一對夫婦的方式來處理這個問題:
使用準備好的聲明,並定義你把值必須是數字型的佔位符。這將防止字符串被放置在那裏。
檢查應用程序的更高層以驗證輸入並確保它是數字。
在MySQL中使用的BINARY關鍵字(我只是猜測,這會的工作,從來沒有真正嘗試過,因爲我一直只是運行一個查詢之前實施了適當的驗證系統) -
SELECT *
FROM table
WHERE BINARY ID = '32anystring';
您需要在您的工作在讀這
http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html
'1.23def' * 2
=> 2.46)儘可能地解析字符串,只要它仍然是一個有效的數字。如果第一個字母不能是數字的一部分,結果將變爲0
這稍微不正確(至少對於我的版本)。 SELECT'abc123def'* 2 => 0,如果你刪除了前導字母,它確實有效。 – therealsix 2011-04-07 01:30:56
@therealsix /謝謝。我認爲它在第一塊上工作。 – RichardTheKiwi 2011-04-07 01:32:49