2016-07-05 102 views
2

This:爲什麼在MYSQL中比較類型不會引發錯誤?

SELECT * FROM table WHERE comlumn1 = column2; 

返回結果。

此:

SELECT * FROM table WHERE column1 != column2; 

返回任何內容,即使有在滿足這兩個要求的列的單元格。

原來,第1列是varchar和第2列是int

我的問題是爲什麼沒有錯誤?爲什麼會返回結果而不是其他結果?如果類型不同,肯定它們總是不相等?

UPDATE

值在column1varchars1234-34column2ints1234。這意味着它會始終匹配,因爲它會將varchar1234-34變成1234

+3

http://stackoverflow.com/questions/4147215/how-int-database-field-gets-compared-to-varchar-type – MusicLovingIndianGirl

+1

@MusicLovingIndianGirl感謝。這是相似的,但在答案之前,我不知道要尋找這樣的問題。我不會爭論人們尋找這個問題。 另外我的問題是_why_有沒有錯誤沒有_how_類型得到比較。我認爲這是一個不同的問題 – Adzz

回答

1

將字符串與數字進行比較時,MySQL會嘗試將字符串轉換爲數字以進行比較。

如果不可能,字符串的數字結果是0

實例:

string value | int value | comparison result 
'abc'   | 1   | 0 = 1 -> false 
'1'   | 1   | 1 = 1 -> true 
'1abc'  | 1   | 1 = 1 -> true 
'abc1'  | 1   | 0 = 1 -> false 
1

當您比較MySQL中的字符串和整數時,MySQL會將該字符串轉換爲整數。具體規則在documentation中描述。在你的情況下,這些將作爲浮點數進行比較。

很容易將整數轉換爲浮點數。字符串被轉換使用隱式轉換 - 轉換字符串中遇到的第一個數字。如果沒有,則值爲零。所以,'12.3abc'變成12.3; 'abc'變成0

這可能是爲什麼比較失敗。但是,我期望=失敗,但<>成功。

+0

謝謝你很好的答案,但@juergen d先到那裏 – Adzz