Vấn đề: Định dạng ID tự động tăng hiển thị dạng 001, 002, 003...
Cột UserId kiểu INT, cần hiển thị có 3 chữ số, điền 0 ở đầu.
Giải pháp: ALTER TABLE ... ZEROFILL
Thay đổi định nghĩa cột thành INT(3) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY.
1. Tạo bảng ban đầu
CREATE TABLE DemoTable (
UserId INT,
UserName VARCHAR(20)
);
2. Thay đổi cột sang ZEROFILL
ALTER TABLE DemoTable
CHANGE UserId UserId INT(3) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY;
3. Kiểm tra cấu trúc (DESC)
+----------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------------------+------+-----+---------+----------------+
| UserId | int(3) unsigned zerofill | NO | PRI | NULL | auto_increment |
| UserName | varchar(20) | YES | | NULL | |
+----------+--------------------------+------+-----+---------+----------------+
4. Chèn dữ liệu và kiểm tra
INSERT INTO DemoTable (UserName) VALUES ('Chris'), ('David');
SELECT * FROM DemoTable;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 001 | Chris |
| 002 | David |
+--------+----------+
Lưu ý quan trọng
- Chỉ ảnh hưởng hiển thị – Giá trị lưu trữ vẫn là số nguyên 1, 2. Driver JDBC/Connector thường trả về kiểu Integer.
ZEROFILLngụ ýUNSIGNED– Không lưu số âm.- Deprecated từ MySQL 8.0.17 – Sẽ bị loại bỏ tương lai. Khuyên dùng
LPAD()khi SELECT hoặc format ở ứng dụng.
Cách thay thế (Khuyên dùng)
-- Khi SELECT
SELECT LPAD(UserId, 3, '0') AS FormattedId, UserName FROM DemoTable;
-- Hoặc tạo VIEW
CREATE VIEW v_DemoTable AS
SELECT LPAD(UserId, 3, '0') AS UserId, UserName FROM DemoTable;
Ở application layer (Java, Python, PHP...): String.format("%03d", id).