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

沒有留言:

張貼留言

Web 技術中的 Session 是什麼?

轉載原文:  Web 技術中的 Session 是什麼? 本文目標 在 Web 的世界裡,Session 已經是被廣泛使用的一種技術,大多數的 Web 開發者,肯定都能運用自如。在現今的各類 Web 應用程式的開發框架和工具中,Session 也已經被包裝成容易使用的模...