MySQL(48) 什么是ZEROFILL属性?

135 阅读3分钟

ZEROFILL 是 MySQL 数值数据类型的一种属性,用于在存储和显示数值时在左侧填充零,以达到指定的显示宽度。它通常与整数类型(如 INTBIGINTSMALLINT 等)和浮点类型(如 FLOATDOUBLE)一起使用。

1. 定义与用途

  • 定义ZEROFILL 属性用于指定数值列在查询结果中的显示格式,通过在左侧填充零来达到指定的显示宽度。
  • 用途:主要用于需要固定宽度显示数值的场景,如生成带有固定格式的编号、账户号码等。

2. 关键点

  • 显示宽度ZEROFILL 属性与显示宽度(display width)结合使用。显示宽度指定的是显示数值时的最小字符数。
  • 自动无符号(UNSIGNED):使用 ZEROFILL 属性的列会自动变为无符号(即 UNSIGNED),因此不能存储负数。

3. 示例代码

以下是一些示例代码,展示了如何使用 ZEROFILL 属性创建表,并插入和检索数据。

创建表

创建一个带有 ZEROFILL 属性的表:

CREATE DATABASE test_zerofill_db;
USE test_zerofill_db;

CREATE TABLE accounts (
    account_id INT(8) ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY,
    balance DECIMAL(10,2) ZEROFILL NOT NULL
);

在上述示例中:

  • account_id 是一个带有 ZEROFILL 属性的整数列,显示宽度为8。
  • balance 是一个带有 ZEROFILL 属性的十进制列,显示宽度为10(包括小数点和两位小数)。

插入数据

-- 插入数据
INSERT INTO accounts (balance) VALUES 
(1234.56),
(78.90),
(0.00);

检索数据

-- 检索数据
SELECT account_id, balance FROM accounts;

检索结果

+------------+-------------+
| account_id | balance     |
+------------+-------------+
| 00000001   | 0001234.56  |
| 00000002   | 0000078.90  |
| 00000003   | 0000000.00  |
+------------+-------------+

4. 更复杂的示例:订单管理系统

以下是一个更复杂的示例,展示了如何在订单管理系统中使用 ZEROFILL

创建订单表

CREATE TABLE orders (
    order_id INT(10) ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    order_total DECIMAL(12,2) ZEROFILL NOT NULL,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

插入订单数据

-- 插入订单数据
INSERT INTO orders (customer_id, order_total) VALUES 
(1, 12345.67),
(2, 890.12),
(3, 45.00);

检索订单数据

-- 检索订单数据
SELECT order_id, customer_id, order_total, order_date FROM orders;

检索结果

+----------------+-------------+-------------+---------------------+
| order_id       | customer_id | order_total | order_date          |
+----------------+-------------+-------------+---------------------+
| 0000000001     |           1 | 000012345.67| 2023-10-05 15:30:00 |
| 0000000002     |           2 | 000000890.12| 2023-10-05 16:00:00 |
| 0000000003     |           3 | 000000045.00| 2023-10-05 16:15:00 |
+----------------+-------------+-------------+---------------------+

5. 注意事项

  • 存储效率ZEROFILL 仅影响数据的显示格式,而不影响数据的实际存储。使用 ZEROFILL 的列在存储时不会额外占用空间。
  • 自动无符号:带有 ZEROFILL 属性的列会自动变为无符号(UNSIGNED),因此不能存储负数。如果需要存储负数,不应该使用 ZEROFILL
  • 显示宽度:显示宽度仅用于显示目的,不影响数据的实际存储和处理。

小结

  • ZEROFILL 属性:用于在显示数值时在左侧填充零,以达到指定的显示宽度,常用于需要固定宽度显示数值的场景。
  • 自动无符号:使用 ZEROFILL 属性的列会自动变为无符号(UNSIGNED),不能存储负数。

通过理解 ZEROFILL 属性的用途和特点,可以更好地设计和优化数据库表,确保数据的显示格式符合业务需求。上述示例展示了如何在实际应用中使用 ZEROFILL 属性设计数据库表,并插入和检索数据。