Neo's Blog

首頁 相本 討論 書籤

分類目錄
本站日誌 (51)
碎碎唸啦 (173)
網站架設 (84)
程式設計 (161)
軟體使用 (69)
電子商務 (126)
經營奇想 (48)
基金理財 (11)
聰明消費 (87)
電影心得 (47)
開放原碼 (16)
工作記錄 (2)
毛毛小記 (9)
就是不同 (2)




歷史資料
 




April 10, 2006
[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 似乎會去檢查這個語句的型態。

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

 
由 Neo 發表於 April 10, 2006 12:31 AM 收進你的MyShare個人書籤  

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


tokimeki 發表於 April 11, 2006 02:07 AM

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

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


Neo 發表於 December 13, 2006 07:55 PM

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


發表於 July 30, 2008 08:46 PM
發表迴響  
(*星號開頭為必填欄位)











(請輸入您看到的數字,看不到請按右鍵->顯示圖片)


記住我的資訊?







Copyright 2005 Neo's Blog All rights reserved.