为什么MySQL不允许使用M = D的DECIMAL(M,D)?

时间:2017-06-15 05:40:20

标签: mysql

我可以在mySQL documentation看到

  

D必须不大于M.

但是当我用DECIMAL(10,10)创建数据库时,大于1的值插入为0.999? 为什么M不能等于D?

修改:为了演示:

CREATE TABLE `t3` (
 `a` decimal(8,8) NOT NULL
)

INSERT INTO t3 (a) VALUES (1.43);

0.99999 ...将被插入。

2 个答案:

答案 0 :(得分:0)

我刚刚创建了一个表....

CREATE TABLE `t3` (
 `a` decimal(8,8) NOT NULL
)

根据文档,这是可以的,因为你指出,D不大于M - 但它等于M.所以这是有效的。

至于为什么不允许1 - 这是因为我已经定义了一个有8位数字的字段 - 所有8位都是之后的小数位。因为1在小数位之前,所以它大于允许的范围,因为它在小数位之前。

答案 1 :(得分:0)

  

DECIMAL列的声明语法是DECIMAL(M,D)。该   参数的值范围如下:

     

M是最大位数(精度)。它的范围是1   (较早版本的MySQL允许范围为1到254.)

     

D是小数点右边的位数(   规模)。它的范围为0到30,且不得大于M.

enter image description here

M不能小于D.或:

  

D必须不大于M.

M = D完全有效。在这种情况下,您的所有数字都将位于小数点的右侧,有效地限制您存储值0,00000 ....至0,99999 ....其中小数位数为D