MySQL文档说`decimal` 的最大位数是 `65`,什么意思?

十进制数 (m,d) 定义数字范围,其中 m 最多可以有 6 5 位十进制数字,d 最多可以有 3 0 位十进制数字。
如果省略 m,则默认为 1 0;如果省略 d,则默认为 0。
例如,十进制数(5 ,2 )的范围是-9 9 9 .9 9 到9 9 9 .9 9 ,存储在4 个字节中。
十进制 (1 8 ,9 ) 由于整数和十进制数各有 9 位,因此总共需要 8 个字节。
以“+”、“-”或“0”开头的数据无法保存。
+ 存储正数,- 则不存储。

mysql decimal类型设置方法详解

嘿,你如何使用这个 DECIMAL?让我带您了解一下...
上周,一位客户询问我的系统为什么金额字段总是报告随机错误。
经过检查,我发现我使用了错误的DECIMAL类型。
这个如果用不好的话,真的会让人头疼。


1 坦率地说,基本设置是 DECIMAL(M,D) 这两个参数是核心:
M:总位数,从1 到6 5 中选择。
例如DECIMAL(5 ,2 )表示总计有5 位,小数点后有2 位。
因此,整数部分最多有3 位(1 位+2 位小数=3 位),比如1 2 3 .4 5 ,没有问题。
如果我们写 DECIMAL(3 ,2 ),存储 1 2 3 .4 5 是错误的,因为没有足够的整数位数。

D:十进制数字,从0到3 0,但必须小于或等于M。
默认值为0。
例如,DECIMAL(5 )实际上等于DECIMAL(5 ,0),它是纯整数类型。
我之前在一个旧项目中遇到过这个陷阱。
如果不写D,则结果默认被视为整数,直接丢失小数位。

2 存储范围,你需要知道可以存储什么 这不是偶然保存的:
DECIMAL(5 ,2 ):可以存储-9 9 9 .9 9 到9 9 9 .9 9 如果超出这个范围,比如插入1 0000.00,数据库会直接报错。
这适用于通常的金额。

DECIMAL(1 0,4 ):可以存储-9 9 9 9 9 9 .9 9 9 9 到9 9 9 9 9 9 .9 9 9 9 它非常准确,适合需要以美分计算的财务情况。

M和D必须根据实际业务需求确定,不要随意设置。

3 两种特殊性能,使用得当好用
UNSIGNED:只允许存储正数。
例如:DECIMAL(5 ,2 ) UNSIGNED,表示从 0 到 9 9 9 .9 9 如果插入负数,就会崩溃。
适合数量肯定不为负数的库存情况。

ZEROFILL:自动填充。
例如:DECIMAL(5 ,2 ) ZEROFILL,如果保存1 2 .3 4 ,则显示为001 2 .3 4 但注意,这只是显示效果,实际容量仍然是1 2 .3 4 ,别被骗了。
有时这可以用来对齐数据并使其看起来更好。

4 实际使用建议
数量字段:强烈建议使用 DECIMAL(1 9 ,4 )。
这符合会计准则,最多可保存 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 .9 9 9 9 ,保留 4 位小数(分)。
我刚刚接手的一个电商项目就用了这个,运行起来很顺利。

重量测量:DECIMAL(1 0,3 )很好,可以保持毫米精度。
例如:1 2 3 .4 5 6 公斤。

版本说明:MySQL 5 .1 及以上版本完全支持DECIMAL(M,D)。
在旧版本(例如 3 .2 3 之前)中,M 的范围可能仅为 1 到 2 5 4 ,具体取决于您的环境。

性能注意事项:存储空间计算使用每个 9 位数字 4 个字节。
DECIMAL(1 9 ,9 )需要9 个字节(1 0位整数占用5 个字节,9 位十进制数字占用4 个字节)。
如果精度太高,就会占用更多的内存,所以必须有一个权衡。

5 保存机制基本存储 DECIMAL 直接以二进制形式存储数字,而不是字符串。
每4 个字节存储9 个数字。
如果号码少于9 位,则按实际位数保存。
最大可存储3 1 字节(含1 字节小数点),保证高精度计算的同时保持良好的存储效率。


无论如何,你可以弄清楚...如果业务情况复杂,你应该测试一些设置,而不是只听理论。
我还在想这个问题

sql中decimal用途 DECIMAL精确数值的5个参数说明