Hãy chọn kiểu nhỏ nhất mà vẫn chứa đúng mọi giá trị bạn sẽ lưu. Kiểu đúng giúp tiết kiệm disk, thu nhỏ index, và ngăn hỏng dữ liệu âm thầm.
Hãy chọn kiểu nhỏ nhất mà vẫn chứa đúng mọi giá trị bạn sẽ lưu. Kiểu đúng giúp tiết kiệm disk, thu nhỏ index, và ngăn hỏng dữ liệu âm thầm.
INT (4 byte) cho phần lớn id; BIGINT (8 byte) chỉ khi bạn thực sự vượt ~2.1 tỷ.DECIMAL(10,2) cho tiền — tuyệt đối không dùng FLOAT/DOUBLE, chúng làm tròn ở hệ nhị phân và mất xu.VARCHAR(n) cho text có giới hạn (tên, email); n là trần, storage chỉ tốn đúng phần bạn dùng.TEXT cho khối lớn (bài viết) — lưu off-page và không thể có default; đừng dùng cho giá trị ngắn mà bạn lọc theo.DATETIME (không timezone, 8 byte) so với TIMESTAMP (quy về UTC, 4 byte, giới hạn ~2038).CREATE TABLE payments (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
amount DECIMAL(10,2) NOT NULL, -- tiền chính xác, không FLOAT
currency CHAR(3) NOT NULL, -- luôn 3 ký tự -> CHAR cố định
note VARCHAR(255), -- có giới hạn, index được
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Bẫy: SQL mode mặc định từ chối giá trị sai (tốt) --
INSERT INTO payments (amount) VALUES ('abc'); -- ERROR 1366, không âm thầm thành 0
FLOAT cho tiền.VARCHAR(255) ở khắp nơi theo thói quen — key quá khổ làm phình index.UNSIGNED cho id/count không bao giờ âm (nhân đôi khoảng dương).Data type là quyết định về tính đúng đắn và hiệu năng rẻ nhất bạn đưa ra, nhưng lại khó đổi nhất về sau — kiểu hẹp và chính xác giữ index nhỏ và chặn dữ liệu xấu ngay từ cửa trước khi nó thành bug ở production.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ