2014-09-19 18 views
0

首先將添加記錄,並有一個錯誤讓我們看看我的表結構是如何設置的:在MySQL中使用正向工程爲數字數據類型

CREATE TABLE IF NOT EXISTS `RFVPOS`.`Station` (
     `id` INT NOT NULL AUTO_INCREMENT, 
     `code` VARCHAR(20) NOT NULL, 
     `name` VARCHAR(45) NOT NULL, 
     `safeDropAmount` DECIMAL(4,4) NOT NULL, 
     `deadStockVolume` DECIMAL(4,4) NOT NULL, 
     PRIMARY KEY (`id`)) 
    ENGINE = InnoDB 

而且這裏是MySQL的正向工程的作用:

`INSERT INTO `rfvpos`.`station` (`code`, `name`, `safeDropAmount`, `deadStockVolume`) VALUES ('test', 'test',` '100', '300'); 

林意識到,通過附上我safeDropAmount和deadStockVolume單qoutes將意味着他們在varchar數據類型,所以IM這樣的刪除它們:

`INSERT INTO `rfvpos`.`station` (`code`, `name`, `safeDropAmount`, `deadStockVolume`) VALUES ('test', 'test', 100, 300); 

但無論哪種方式,當我執行這些腳本時,他們會說同樣的事情。這個:

ERROR 1264: 1264: Out of range value for column 'safeDropAmount' at row 1 

請幫助我。我以前在使用MySQL,3年後我又回到了它,所以我有點爽快。

此致

+0

更改('test','test','100,300);('test','test',100,300)工作 – Satya 2014-09-19 04:39:36

+0

@Satya:好,趕上這個虛假的倒退是一個問題,但它會給出一個不同的錯誤,而不是報告的那個錯誤 – spencer7593 2014-09-19 05:02:40

+0

是的,那是無意的,我現在要編輯。 – 2014-09-19 05:19:14

回答

1

列數據類型DECIMAL(4,4)將不允許超過0.9999大的值被存儲。試圖存儲大於該值的值(例如300)會導致「超出範圍」錯誤。

DECIMAL(4,4)指定了總共四位數字,其中四位數字(全部)在小數點後面,在小數點前留下零位數字。

如果我們想要允許高達9999.9999的值,我們希望數據類型爲DECIMAL(8,4)

這是總共八位數字,小數點後面有四位數字,小數點前的餘數(8-4)。


此外,MySQL將在數值上下文中將單引號中的值評估爲數字,例如插入到DECIMAL列中。圍繞數字值添加或除去單引號,例如300'300',不起作用,並且它們將被評估相同。 (差異是返回的錯誤,如果我們有一個非數值的值(無效的列vs .re是錯誤的差異返回我們指定的文字不是數字...... foo會提高「未知列「錯誤,'foo'會引發」錯誤值「錯誤

+0

我發現這個網站: http:/ /www.w3resource.com/mysql/mysql-data-types.php 並且通過Float類型討論,有這個細分市場: *例如,定義爲FLOAT(8,5)的列看起來像-999.99999。 MySQL在存儲值時執行四捨五入,因此如果將999.00009插入到FLOAT(7,4)列中,則近似結果爲999.0001。 * 這只是意味着我的聲明數字(4,4)意味着有一個最大數字的4個字符只包括小數和整數。 但是這不代表,它仍然允許從.0001到9999的條目? – 2014-09-19 05:10:09

+0

從我在這個答案中的理解中,MySQL首先確定從小數位置放置在十進制參數中的最大值? 4意味着。9999,這將得到所有的分配放置在第一個參數。那是對的嗎? – 2014-09-19 05:24:13

+0

@李小姐:是的。 DECIMAL(4,0)'在小數點前四位數字。如果我們想在小數點前後四位數字,我們需要使用'DECIMAL(5,1)'。 – spencer7593 2014-09-19 05:31:10