Tùy thuộc vào kiến trúc và nhiều yếu tố khác.
Ví dụ: bạn không cho phép đọc/ghi dữ liệu ngoại trừ sử dụng các thủ tục được lưu trữ. Trong trường hợp này, bạn có thể cảm thấy tự do sử dụng kiểu dữ liệu "tinyint". Nếu bạn cho phép đọc/ghi với các truy vấn trực tiếp, tốt hơn nên sử dụng ràng buộc ENUM để tránh trạng thái không đúng (nếu UI hoặc back-end có thể đặt trạng thái "sai" này).
Mặt khác (và có thể) có thể có thay đổi về luồng dữ liệu và có thể bạn sẽ cần thêm trạng thái mới. Trong trường hợp này, bạn sẽ cần: 1) không làm gì nếu bạn có kiểu dữ liệu tĩnh; 2) thay đổi nếu bạn có ENUM.
Vì vậy ... câu trả lời của tôi là: tùy thuộc vào đơn đăng ký và yêu cầu của bạn.
Kiểm tra sự phù hợp: http://www.mysqlperformanceblog.com/2008/01/24/enum-fields-vs-varchar-vs-int-joined-table-what-is-faster/ –
Có các vấn đề khác với 'ENUM '. Đối với một điều, tất cả các cột 'ENUM' có thể có một giá trị" không xác định "đặc biệt của chuỗi rỗng (ngoài' NULL' nếu được phép); hơn nữa, giá trị này sẽ được sử dụng cho bất kỳ gán giá trị không hợp lệ trừ khi sử dụng chế độ SQL nghiêm ngặt. Điều này có thể dẫn đến sự thiếu nhất quán về cơ sở dữ liệu ngoài ý muốn; Ngoài ra, nếu thực tế có giá trị chuỗi rỗng trống trong danh sách 'ENUM', điều này có thể dẫn đến sự nhầm lẫn rất lớn (vì người ta phải kiểm tra giá trị số để xác định loại" chuỗi rỗng nào được lưu trữ "). – eggyal
Hơn nữa, việc chuyển đổi ngầm thành giá trị số trong ngữ cảnh số có thể gây ra sự nhầm lẫn đáng kể - đặc biệt nếu một cố gắng sử dụng các chuỗi biểu diễn các số dưới dạng giá trị 'ENUM'. Tài liệu hướng dẫn đưa ra một ví dụ tốt về danh sách 'ENUM'' ('0', '1', '2') ':" * Nếu bạn lưu trữ '2', nó được hiểu là giá trị chỉ mục và trở thành' '1 ''(giá trị với chỉ số 2). Nếu bạn lưu trữ' '2'', nó khớp với một giá trị đếm, vì vậy nó được lưu trữ dưới dạng' '2''. Nếu bạn lưu trữ' '3'', nó không khớp với bất kỳ giá trị nào Giá trị điều tra, do đó, nó được coi là một chỉ số và trở thành ''2'' (giá trị với chỉ số 3). *" – eggyal