player | wins | loses |
Tom | 1 | 2 |
Jerry | 2 | 0 |
假設有個如上的表格,裡面有兩個欄位 wins, loses,我們想要算出 wins - loses 的結果
並且按照大小排序,我們可以這樣作:
SELECT player, (wins - loses) AS diff ORDER BY diff
看來很簡單的 SQL,可能因為欄位資料型態設定的關係,會出現完全不同的結果
如果 wins, loses 欄位其中有一個 (或是兩者) 指定為 UNSIGNED,當欄位相減出現負數的時候
MySQL 會把這個負數結果變成超級大的 "正數" 天文數字,結果比較如下 :
player | wins | loses | diff (正確) | diff (錯誤) |
Tom | 1 | 2 | -1 | 65789651654... |
Jerry | 2 | 0 | 2 | 2 |
當然排列的順序就不會按照預期了,
解決的辦法很簡單,就是把要相減的兩個欄位,型態都改成 SIGNED (可接受負數) 即可
參考連結 : [MySQL 5] UNSIGNED 造成的 Out of range
沒有留言:
張貼留言