文档说明
在标准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
,那么文档的确切含义是什么?
答案 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的任何值)当N
为0
时,不存储小数。因此,将4.321存储为4。您可以存储的数字(无舍入或截断)是小数点后不超过N个数字,而小数点后不超过M-N个数字。