2014-09-19 151 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