decimal(m),允许实现决定m的值

mrphzbgm  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(479)

文件上说,
在标准sql中,语法decimal(m)等价于decimal(m,0)。类似地,语法decimal相当于decimal(m,0),其中允许实现决定m的值。mysql支持这两种不同形式的十进制语法。
关于 DECIMAL(M) 或者 DECIMAL(M,0) 我感到困惑的是,
对于十进制(m,0),允许实现决定m的值。
如果列设置为 DECIMAL(65) , 4.321 将存储为 4 ,那么文档究竟意味着什么呢?

lrpiutwd

lrpiutwd1#

要以不同的方式表达它,并使用mysql选择的值: DECIMAL 手段 DECIMAL(10,0) (需要5个字节) DECIMAL(12) 手段 DECIMAL(12, 0) (其中“12”可以是最大为65的任何值)
也就是说,总是有一个m和一个n,无论是显式的还是非显式的。
什么时候 N0 ,不存储小数。因此,4.321将存储为4。您可以存储的数字(无舍入或截断)是小数点后不超过n位,小数点前不超过m-n位的数字。

7qhs6swi

7qhs6swi2#

通过在MySQL5.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/

相关问题