[MySQL 5] UNSIGNED 造成的 Out of range

星期五的時候發現下面這個 SQL 語法在 MySQL 4 是正常的,但是到 MySQL 5 就出現 Out of range 的錯誤。

UPDATE products, orders_products
SET products.quantity = products.quantity – orders_products.quantity
WHERE products.id = orders_products.product_id
AND orders_products.order_id=’xxx’

(後來查出是紅字的部份有問題)


因為 orders_products.quantity 的 Int 型態是 UNSIGNED ,而 products.quantity 不是。雖然這個語法不會去更新 orders_products.quantity 這個欄位,也不會讓 orders_products.quantity 產生負數,但是 MySQL 5 似乎會去檢查這個語句的型態。

細節我還沒時間查,先做個記錄。^^

3 comments On [MySQL 5] UNSIGNED 造成的 Out of range

  • 裝MySQL5的時候,不要選嚴謹模式試試看…

  • 原因也大概知道了,在 MySQL INT 的 unsigned 跟 signed 二者相減如果會是負數的話,如果沒有出現 Out of range ,MySQL 可能會回傳 INT 的天文數字 18446744073709551615。

    也就是 0-1 正常要回傳 -1 ,但是當 signed – unsigned 的時候,就會 Out of range 或是丟一個超級大數出來,這跟 MySQL 底層對於 sign bit 的處理機制有關,這樣算不算是 bug 也是見人見智了。

  • 你講ㄉ那些不清楚~但是我家玩楓之谷時會出現OUT OF RANREㄉ東西黨在中間ㄟ@@該怎ㄇ作才好勒???請各位教教我ㄅ~~

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar