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

Hiển thị AUTO_INCREMENT ID với số 0 dẫn đầu (001, 002...) trong MySQL

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.
  • ZEROFILL ngụ ý 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).