2009-11-25 61 views
53

在MySQL中,用於存儲產品價格(或一般貨幣)的首選列類型是什麼? Google瞭解到我經常使用FLOAT DECIMAL,但我不知道哪一個更好。MySQL:(產品)價格的首選列類型?

我存儲的價格範圍爲0.01至25.00。當然,更高的價值也是可能的。 (注:我不是要求複製意大利麪代碼,我只是給你更多的信息,可以幫助你形成更完整的答案)。

由於

回答

59

十進制是一個我將使用 十進制/數字之間

基本的差別和浮動:浮法是 近似數數據類型,這 意味着不是在所有的值數據 類型範圍可以精確表示。 十進制/數字是固定精度 數據類型,表示數據類型reane中的所有 值可以是 ,其精確表示爲 。

從十進制或數字轉換爲 float可能會導致一些精度的損失 精度。對於Decimal或數字 數據類型,SQL Server認爲的精度各 具體的組合和比例 作爲不同的數據類型。 DECIMAL(4,2)和DECIMAL(6,4)是 不同的數據類型。這意味着 11.22和11.2222是不同的類型,雖然這不是浮動的情況。 浮法(6)11.22和11.2222是 相同的數據類型。

+0

謝謝jdt199和Razzie,會接受你的答案,但選擇你的是最完整的。 – SolidSmile 2009-11-25 14:48:47

+1

@Sheff DECIMAL(2,2)應該是DECIMAL(4,2)。 DECIMAL(2,4)應該是DECIMAL(6,4)。 請參閱https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html – cgaldiolo 2016-08-01 17:55:25

13

我不會使用float,因爲它可以給舍入誤差,因爲它是一個浮點類型。

使用十進制:

「的decimal和numeric類型 用於存儲值,這就是它 重要的是保持準確 精度,例如與貨幣 數據」

見:http://dev.mysql.com/doc/mysql/en/numeric-types.html

+0

另請參閱:https://dev.mysql.com/doc/refman/5.7/ en/fixed-point-types.html – Amr 2018-02-23 12:34:24

23

字段類型 「十進制」 是不錯的。

如果你有解釋第1條的價格,那麼你可以使用product_price decimal(6,2) NOT NULL,即可以在前2個數字存儲的價格高達6個位數帶小數點。

現場product_price decimal(6,2) NOT NULL,最大值將存儲價格高達9999.99

如果所有的價格都在0.01到25.00,然後product_price decimal(4,2) NOT NULL,會很好,但如果你將有更高的價格,那麼你可以在decimal(4,2)設置的任何值。

6

我喜歡INT(價格由100 multipled),這在其他軟件解決浮點問題。

+2

我繼承了這樣的系統,看到這個傢伙如何在基於價格進行數據庫搜索之前將所有價格乘以所有價格是很有趣的,反之亦然。後來,我已經有足夠的痛苦來捕捉錯誤,因爲這之前移動到十進制 – Tebe 2017-09-18 22:04:39

+0

@ГляОпаОпа你如何解決使用十進制浮點問題? – Peter 2017-09-20 05:02:28

+0

在存儲之前,我將每個數字四捨五入到第三個符號後面,並使用DECIMAL(N,3)來存儲 – Tebe 2017-09-20 06:56:52