DECIMAL(M),允许实现确定M的值

时间:2018-10-16 17:46:37

标签: mysql decimal decimal-point mysql-5.6

文档说明

  

在标准SQL中,语法DECIMAL(M)等效于DECIMAL(M,0)。   同样,语法DECIMAL等效于DECIMAL(M,0),其中   允许实现决定M的值。MySQL支持   这两种DECIMAL语法的变体形式。

DECIMAL(M)DECIMAL(M,0)有关的部分令我感到困惑,

  

对于DECIMAL(M,0),允许实现确定M的值。

如果将列设置为DECIMAL(65),则4.321将存储为4,那么文档的确切含义是什么?

2 个答案:

答案 0 :(得分:1)

通过在MySQL 5.6中运行此测试:

create table t(
deci decimal, 
deci4 decimal(4),
deci40 decimal(4,0),
deci42 decimal(4,2)
);


insert into t(deci, deci4, deci40, deci42)
values
(1234.1234,1234.1234,1234.1234,1234.1234);

插入失败,因为1234.1234不适合(4,2)

insert into t(deci, deci4, deci40, deci42)
values
(1234.1234,1234.1234,1234.1234,34.1234);

运行时插入以下值:

deci    deci4   deci40  deci42  
1234    1234    1234    34.12

DECIMAL(M,N)中,M是数字可以占用的位数,包括小数位,N是小数位数。 M的最大值为65,N的最大值为30。 N必须小于M。

如果N=0是小数0

如果未定义N,则小数位数似乎是由数字的整数部分(小于M)实际占用的位数定义的,其余剩余的位数根据需要保留

如果两者均未定义,则M默认为10

有关从此处获取的默认值的信息: http://www.mysqltutorial.org/mysql-decimal/

答案 1 :(得分:1)

用一种不同的方式表达它,并使用MySQL选择的值:

  • DECIMAL的意思是DECIMAL(10,0)(占用5个字节)
  • DECIMAL(12)的意思是DECIMAL(12, 0)(其中“ 12”可以是不超过65的任何值)
  • 也就是说,总有一个M和一个N,无论是否明确说明。

N0时,不存储小数。因此,将4.321存储为4。您可以存储的数字(无舍入或截断)是小数点后不超过N个数字,而小数点后不超过M-N个数字。