Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Đệm số 0 cho giá trị cột trong MySQL (ZEROFILL)

Thuộc tính ZEROFILL

Khi định nghĩa cột số nguyên, thêm ZEROFILL để tự động đệm số 0 ở đầu đến độ dài hiển thị (display width).

Ví dụ

Tạo bảng:

CREATE TABLE DemoTable626 (
    Value INT(5) ZEROFILL
);

Chèn dữ liệu:

INSERT INTO DemoTable626 VALUES (9), (12), (567), (3478);

Kết quả hiển thị:

+-------+
| Value |
+-------+
| 00009 |
| 00012 |
| 00567 |
| 03478 |
+-------+

Đặc điểm quan trọng

  • Chỉ ảnh hưởng hiển thị: Giá trị lưu trữ nội bộ vẫn là số nguyên bình thường (9, 12, 567, 3478).
  • Display width: Số trong ngoặc INT(5) = độ rộng hiển thị = 5 chữ số.
  • Tự động thêm UNSIGNED: ZEROFILL ngầm hiểu UNSIGNED (không cho âm).
  • Không ảnh hưởng tính toán: Value + 1 vẫn đúng toán học.

So sánh: ZEROFILL vs LPAD trong SELECT

-- ZEROFILL (tự động khi SELECT)
SELECT Value FROM DemoTable626;  -- 00009

-- LPAD (tùy ý, không cần schema change)
SELECT LPAD(Value, 5, '0') FROM DemoTable626;  -- 00009

-- FORMAT (có dấu phẩy nghìn)
SELECT FORMAT(Value, 0) FROM DemoTable626;  -- 9 (không pad 0)

Lưu ý

  • Display width (INT(5)) KHÔNG giới hạn phạm vi lưu trữ (INT luôn -2^31..2^31-1).
  • MySQL 8.0.17+ deprecated display width cho integer types (vẫn hoạt động nhưng warning).
  • Khuyên dùng LPAD trong SELECT hoặc format ở application layer thay vì ZEROFILL.
  • Không dùng cho khóa ngoại (FK) vì so sánh giá trị số, không quan tâm hiển thị.

Ứng dụng thực tế

  • Mã số định danh: STT, mã phiếu, mã nhân viên (EMP0001, EMP0002...).
  • Số thứ tự hóa đơn, ticket number.
  • Hiển thị báo cáo, export fixed-width file.