首页 > 解决方案 > DECIMAL(M),允许实现来决定 M 的值

问题描述

该文件指出,

在标准 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,那么文档到底是什么意思?

标签: mysqldecimaldecimal-pointmysql-5.6

解决方案


通过在 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=00小数位。

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

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

从这里获取的默认值信息: http ://www.mysqltutorial.org/mysql-decimal/


推荐阅读