Vấn đề: Hiển thị số nguyên với độ rộng cố định, điền 0 ở đầu
Ví dụ: 1 → 0001, 23 → 0023. Thường dùng cho mã số, ID hiển thị.
Giải pháp: Thuộc tính ZEROFILL
Khi định nghĩa cột số nguyên, thêm ZEROFILL. MySQL tự động thêm UNSIGNED.
1. Tạo bảng với ZEROFILL
CREATE TABLE DemoTable (
Code INT(4) ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY
);
INT(4) – Độ rộng hiển thị 4 chữ số. ZEROFILL – Điền 0 ở đầu nếu số chữ số ít hơn 4.
2. Chèn dữ liệu
INSERT INTO DemoTable VALUES (1), (2), (3), (4);
3. Kết quả hiển thị
+------+
| Code |
+------+
| 0001 |
| 0002 |
| 0003 |
| 0004 |
+------+
Lưu ý quan trọng
- Chỉ ảnh hưởng đến hiển thị – Giá trị lưu trữ bên trong vẫn là số nguyên (1, 2, 3...).
ZEROFILLngụ ýUNSIGNED– Không lưu số âm được.- Số chữ số trong ngoặc (
INT(4)) chỉ là gợi ý hiển thị, không giới hạn phạm vi lưu trữ (INT vẫn -2 tỷ đến 2 tỷ). - Khi truy vấn bằng ngôn ngữ lập trình (Java, Python...), driver thường trả về kiểu số, không giữ định dạng 0001. Cần format lại ở lớp ứng dụng nếu cần.
- MySQL 8.0.17+ khuyến cáo không dùng
ZEROFILL(deprecated), hãy dùngLPAD()hoặc format ở ứng dụng.
Cách thay thế (khuyên dùng)
-- Khi SELECT, dùng LPAD
SELECT LPAD(Code, 4, '0') AS FormattedCode FROM DemoTable;
-- Hoặc format ở ứng dụng (ví dụ Java: String.format("%04d", id))