2011-04-07 125 views
1

所以我們只是說我有一個表,只有一個ID是一個整數。我發現運行:MySQL整數比較忽略尾隨alpha字符

SELECT * 
FROM table 
WHERE ID = '32anystring'; 

返回id = 32的行。顯然32!='32anystring'。

這似乎很奇怪。它爲什麼這樣做?它可以關閉嗎?什麼是最好的解決方法?

回答

2

在將字符串轉換爲數字時,在大多數編程語言中將常用行爲解釋爲數字。

有一對夫婦的方式來處理這個問題:

使用準備好的聲明,並定義你把值必須是數字型的佔位符。這將防止字符串被放置在那裏。

檢查應用程序的更高層以驗證輸入並確保它是數字。

在MySQL中使用的BINARY關鍵字(我只是猜測,這會的工作,從來沒有真正嘗試過,因爲我一直只是運行一個查詢之前實施了適當的驗證系統) -

SELECT * 
FROM table 
WHERE BINARY ID = '32anystring'; 
1

您需要在您的工作在讀這

http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

  1. ,或者比較兩個不同類型的,他們中的一個將被轉換爲其他的。
  2. 字符串 - >數字的MySQL轉換(您可以做'1.23def' * 2 => 2.46)儘可能地解析字符串,只要它仍然是一個有效的數字。如果第一個字母不能是數字的一部分,結果將變爲0
+0

這稍微不正確(至少對於我的版本)。 SELECT'abc123def'* 2 => 0,如果你刪除了前導字母,它確實有效。 – therealsix 2011-04-07 01:30:56

+0

@therealsix /謝謝。我認爲它在第一塊上工作。 – RichardTheKiwi 2011-04-07 01:32:49