MySQL DECIMAL 类型介绍

在本文中,我们将带您了解 MySQL 中的定点数数据类型 DECIMAL。

在 MySQL 中, DECIMAL 数据类型是定点数数据类型,用来存储精确的树枝,比如账务金额等。底层实现上,MySQL 使用二进制形式存储该类型的值。

MySQL DECIMAL 语法

为了存储精确的数值,我们需要为 DECIMAL 数据类型指定总位数和小数位数。这里是 DECIMAL 数据类型的语法:

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

这里:

  • M 是总的位数,不包含小数点和正负号。
  • D 是小数部分的位数。如果 D0 则表示没有小数部分。当 D 省略时,默认值为 0
  • UNSIGNED 属性表示数值是无符号的。无符号的数字不能是负数。
  • ZEROFILL 属性表示当整数部分位数不足时,用整数的左侧用 0 填充。带有 ZEROFILL 的列将自动具有 UNSIGNED 属性。这和 INT 数据类型一样。

DEC, NUMERIC, FIXEDDECIMAL 的同义词。

比如,我们定义了如下一个列:

amount DECIMAL(9, 4);

那么 amount 列的值的范围是从 -99999.999999999.9999

比如,我们定义了如下一个列:

amount DECIMAL(9);

那么 amount 列的值的范围是从 -999999999999999999

MySQL DECIMAL 实例

首先,创建一个表 customer_balance,这个表有 3 列:idnamebalance

CREATE TABLE customer_balance (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255),
  balance DECIMAL(14, 4) NOT NULL
);

然后,插入数据materials 表中。

INSERT INTO customer_balance(name, balance)
VALUES ('Tim', 1500.04),
       ('Jim', 10000),
       ('Tom', 333333.4);

现在,让我们从 customer_balance 表中查询数据

SELECT * FROM customer_balance;
+----+------+-------------+
| id | name | balance     |
+----+------+-------------+
|  1 | Tim  |   1500.0400 |
|  2 | Jim  |  10000.0000 |
|  3 | Tom  | 333333.4000 |
+----+------+-------------+

最后,我们将更改 balance 列使其具有 ZEROFILL 属性。如下:

ALTER TABLE customer_balance
MODIFY balance DECIMAL(14, 4) ZEROFILL NOT NULL;
Query OK, 3 rows affected, 1 warning (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 1

注意,输出告诉我们: 3 rows affected

让我们再次查询表中的行。

SELECT * FROM customer_balance;
+----+------+-----------------+
| id | name | balance         |
+----+------+-----------------+
|  1 | Tim  | 0000001500.0400 |
|  2 | Jim  | 0000010000.0000 |
|  3 | Tom  | 0000333333.4000 |
+----+------+-----------------+

这里,输出的数值的左侧用 0 填充了。

结论

在本文中,我们带您学习了 MySQL 中的定点数数据类型 DECIMAL

  • DECIMAL 数据类型可以用来表示很精确的数字。
  • DECIMAL 数据类型具有 UNSIGNEDZEROFILL 属性。