2009/08/05

MySQL 欄位相減後產生天文數字

(發表於 2009-04-20 )

playerwinsloses
Tom12
Jerry20

假設有個如上的表格,裡面有兩個欄位 wins, loses,我們想要算出 wins - loses 的結果
並且按照大小排序,我們可以這樣作:
SELECT player, (wins - loses) AS diff ORDER BY diff
看來很簡單的 SQL,可能因為欄位資料型態設定的關係,會出現完全不同的結果

如果 wins, loses 欄位其中有一個 (或是兩者) 指定為 UNSIGNED,當欄位相減出現負數的時候
MySQL 會把這個負數結果變成超級大的 "正數" 天文數字,結果比較如下 :


playerwinslosesdiff (正確)diff (錯誤)
Tom12-165789651654...
Jerry2022

當然排列的順序就不會按照預期了,
解決的辦法很簡單,就是把要相減的兩個欄位,型態都改成 SIGNED (可接受負數) 即可

參考連結 : [MySQL 5] UNSIGNED 造成的 Out of range

沒有留言:

張貼留言