2011-08-09 22 views
23

我有一個數據庫表,其中一個字段爲cost,它被設置爲DECIMAL數據類型。我將參數設置爲4,2,它應該允許小數點前的4個數字,以及之後的2個數字。如何將DECIMAL插入到MySQL數據庫中

(有人告訴我,這裏的4是總量,而2是小數點後的金額,可能會有人請清除了在一個側面說明?)

當我通過插入數據POST請求(例如值3.80)存儲到我的數據庫的數據實際上是99.99

我在做什麼錯誤導致此?

這裏的表:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`title` varchar(256) NOT NULL, 
`cost` decimal(4,2) NOT NULL, 
PRIMARY KEY (`id`) 
) 

這裏是我的外接查詢:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80') 

更新: 它的工作原理,我改變4,2到6,2

+0

讓我們看看create table語句和用於插入值的sql – Mark

回答

30

MySql十進制類型比小數點左側和右側稍微複雜一些。

第一個參數是精度,這是總位數。第二個參數是比例尺這是小數點右邊的最大位數。

因此,(4,2)可以是從-99.9999.99的任何值。

至於爲什麼你得到99.99而不是所需的3.80,你插入的值必須被解釋爲大於99.99,所以使用最大值。也許你可以發佈你用來插入或更新表的代碼。

編輯

校正的比例和精度的使用情況的誤解,每http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

6

是後, 4,2表示「總共4位數,其中2位小數點後」。這轉換爲格式爲00.00的數字。除此之外,你將不得不向我們展示你的SQL查詢。沒有很好的理由,PHP不會將3.80轉換成99.99。也許你在查詢中錯位了你的字段/值,並試圖插入一個屬於另一個字段的較大數字。

2

我注意到你的編碼別的東西....看

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80') 

在你的「CREATE TABLE」的代碼,您有ID爲「AUTO_INCREMENT」,這意味着它會自動生成該字段的結果。 ...但在上面的代碼中,將其包含爲插入內容之一,在「VALUES」中,您有一個0 ... idk,如果這是您告訴我們將它留爲空白的方式,因爲它設置爲AUTO_INC。或者如果這是您的實際代碼...如果它是你不僅要你不要試圖將數據發送到一個字段設置爲自動生成它的代碼,但正確的方式做是錯誤的。將

'0', 

你把

0, 

大聲笑....所以這可能會導致一些問題...我也只是注意到,在「測試說明」後的代碼中,你有一個空間在......之前,可能會拋出一些東西。 .. idk ..我希望這可以幫助你解決一些其他問題,你現在可能會把你的頭髮拉出來......說到......我需要在把所有頭髮都撕掉之前弄清楚我的問題。 .... 祝你好運.. :)

UPDATE .....

我差點忘了......如果你有0出現表明它是空白......你可能會進入「測試題」作爲id, 「測試描述」作爲標題,然後「3.無論什麼美分」的描述離開「成本」空......這可能是爲什麼它最大限度地出,因爲如果我沒有錯誤,你把它設置爲非NULL。 ...並且你將它留空...所以它迫使...可能....大聲笑

+2

感謝您的回答 - 我曾在你添加你的2個月前接受了正確的答案!將'0'傳遞給設置爲'auto_increment'的字段與將其留空爲空相同。 – Alex