文章目录
一、结论
Mysql中的decimal(N,M)类型中的N与M的含义:
M: 小数部分的长度(若小数点后的长度小于M则会自动补齐到M位;若小数点后面的长度大于M位则会截取M位截取时会四舍五入
)
N:整数+M的长度(即整数部分的长度最大不能超过N-M位)
二、测试
最近在使用MySql数据库的decimal类型时,对decimal(N,M)中的N与M的含义一时有些不太确认了,因此研究一下decimal中N与M的含义。
创建测试表: tran_amt字段定义为decimal(18,2)
CREATE TABLE `decimal_test` (
`id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`tran_amt` decimal(18,2) DEFAULT NULL COMMENT '交易金额',
primary key(id)
) ENGINE=InnoDB AUTO_INCREMENT=0 COMMENT='test测试';
2.1、场景一:测试小数部分没有值
insert decimal_test(tran_amt) values(1);
结果:
结论:若小数部位没有值时,会默认补齐M位的0
2.2、场景二:测试小数部分长度小于M位
insert decimal_test(tran_amt) values(1.2);
结论:若小数部位长度小于M位,会默认补齐到M位
2.3、场景三:测试小数部分长度大于M位
insert decimal_test(tran_amt) values(1.237);
结论:若小数部位长度大于M位,会默认截取M位小数且会四舍五入
三、decimal类型的坑
3.1、mysql中decimal类型会自动四舍五入
场景一:小数部分超过设定的长度自动四舍五入
1:若字段设置为decimal(18,2), mysql存储的值为1.237,小数部分的长度大于字段设置的长度,则会发生四舍五入存入为1.24。
2:若字段设置为decimal(18), 没有小数部分时, mysql存储的值为1.7,则会发生四舍五入存入为2。