innerDBA 发表于 2023-6-5 15:21:26

请教个问题 MYSQL8.0以后 DECIMAL 是否需要额外两个字节存储...

请教个问题 MYSQL8.0以后 DECIMAL 是否需要额外两个字节存储符号和小数点?


CREATE TABLE `test_decimal` (
`TOTAL` decimal(20,6) DEFAULT NULL,
`MONERY` decimal(10,2) DEFAULT NULL,
`ID` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

insert into dba.test_decimal (TOTAL,MONERY) VALUES(99999999999999.88,70000000.09);
insert into dba.test_decimal (TOTAL,MONERY) VALUES(-99999999999999.88,-70000000.09);
SELECT * FROM dba.test_decimal;

# TOTAL                      MONERY              ID
99999999999999.880000        70000000.09           1
-99999999999999.880000        -70000000.09   2按照官方文档计算
decimal类型的数据存储形式是,将每9位十进制数存储为4个字节,不够9位按下面表计算
Leftover Digits        Number of Bytes
0                                 0
1-2                              1
3-4                              2
5-6                              3
7-9                              4


字段decimal(20,6),20-6=14,其中小数部分为6 就对应上表中的3个字节,而整数部分为14,14-9=5,就是4个字节再加上表中的3个字节
3+4+3=10个字节

符号和小数点 是不是要额外加2个字节?
官方文档没有找到说明

yejr 发表于 2023-6-6 08:22:23

官档没说就是没有 :)
页: [1]
查看完整版本: 请教个问题 MYSQL8.0以后 DECIMAL 是否需要额外两个字节存储...