MySQL DECIMAL

2025年3月17日 | 阅读 3 分钟

此数据类型用于存储精确数值。它类似于INT数据类型,用于保留精确精度的列,例如会计系统中的货币数据,如薪水、价格等。MySQL始终使用二进制格式存储DECIMAL值。

语法

以下是定义DECIMAL数据类型列的语法

让我们讨论参数M和D

  • M:这是精度,表示存储值的有效数字的最大数量。M的范围必须在1到65之间。这里,M的最大值为65,这意味着DECIMAL值的计算不超过65位。
  • D:这是标度,表示小数点右边的M的总位数。D的范围必须在0到30之间,并且不应大于M。

上述声明表示该列可以存储D个小数位的M位数字,这意味着它取决于精度和标度。如果未定义D,则假定默认值为0。如果未指定M,则假定默认值为10。我们还可以使用DEC、FIXED、NUMERIC关键字代替DECIMAL,因为它们是此数据类型的同义词。

由于DECIMAL类似于INT数据类型,它还可以接受UNSIGNEDZEROFILL属性。如果我们使用Unsigned,DECIMAL值将不能接受负值。而如果用户使用ZEROFILL属性,MySQL会将M的值填充为0,直到列定义中指定的宽度。MySQL在存储DECIMAL值时使用二进制格式,每9个十进制数字需要4个字节。它分别分配整数部分和小数部分的存储需求。MySQL将前九个十进制数字打包成四个字节,其余数字(剩余数字)需要4个字节的一部分。

MySQL DECIMAL存储

MySQL使用二进制格式存储DECIMAL列中的值,每9个十进制数字需要4个字节。它分别分配整数部分和小数部分的存储需求。MySQL将前九个十进制数字打包成四个字节,其余数字(剩余数字)需要4个字节的一部分。

剩余(剩余)数字的存储可以使用下表进行理解

剩余数字字节数
00
1-21
3-42
5-63
7-94

我们可以通过以下示例来理解上表的说明

假设DECIMAL(20, 9)的小数部分有九位数字,整数部分有20-9=11位数字。接下来,小数部分需要4个字节,整数部分的前九位数字需要4个字节,而剩余数字需要另一个字节,即2个字节。因此,上述数据类型列总共需要9个字节。

MySQL DECIMAL示例

让我们首先在数据库中创建一个名为“orders”的新表,其中包含三列:order_id、prod_name和price。在命令提示符中执行以下查询

接下来,我们需要向新创建的orders表中插入数据。执行以下查询,将三条记录插入表中

最后,运行此语句以获取“orders”表

我们将得到以下输出:

MySQL DECIMAL

现在,我们将通过修改price列来查看ZEROFILL属性的使用,如下所示

现在,再次运行以下语句以获取“orders”表

我们将得到如下输出,其中price列中添加了许多零

MySQL DECIMAL
下一主题MySQL Cast()