MySQL DECIMAL数据类型

2024年10月21日 MySQL DECIMAL数据类型 极客笔记

MySQL DECIMAL数据类型

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

语法

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

column_name DECIMAL (M, D);

让我们讨论参数 M 和 D:

  • M: 这是代表存储值的最大有效数字数量的 精度 。M 的范围必须在1到65之间。在这里,M 的最大值是65,这意味着 DECIMAL 值的计算不超过65位数。
  • D: 这是代表小数点右边总共的数字数量的 刻度 。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 存储方式

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

剩余(多出来的)数字所需的存储空间可以从下表中理解:

Leftover Digits Number of Bytes
0 0
1-2 1
3-4 2
5-6 3
7-9 4

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

假设DECIMAL(20, 9)对于小数部分有9个数字,对于整数部分有20-9=11个数字。接下来,小数部分占用4个字节,并且整数部分对于前9个数字需要占用4个字节,并且对于剩下的数字需要再占用一个字节,即2。因此,上述数据类型列总共需要9个字节。

MySQL DECIMAL示例

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

mysql> CREATE TABLE orders (order_id INT NOT NULL PRIMARY KEY, prod_name VARCHAR(35) NULL, price DECIMAL(15,3) NOT NULL);

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

mysql> INSERT INTO orders(order_id, prod_name, price) VALUES (1,'Laptop', 15000.35), (2, 'iPhone', 20000.32), (3, 'Mouse', 200.32);

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

mysql> SELECT * FROM orders;

我们将得到如下输出:

现在,我们将通过将价格列修改为以下形式来看到使用ZEROFILL属性的用法:

mysql> ALTER TABLE orders MODIFY price DECIMAL(15, 3) zerofill;

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

mysql> SELECT * FROM orders;

我们将得到以下输出,其中在价格列中添加了许多零:

本文链接:http://so.lmcjl.com/news/15926/

展开阅读全文
上一篇:MySQL SET数据类型 下一篇:MySQL 通配符