2008-11-03 24 views
16

Nếu tôi có một bảng như thế này:MySQL Store Enums như thế nào?

CREATE TABLE sizes (
    name ENUM('small', 'medium', 'large') 
); 

là MySQL sẽ lưu trữ những chuỗi trong mỗi hàng, hoặc trong nội bộ nó sẽ sử dụng một cái gì đó nhỏ hơn như số nguyên để biết được giá trị enum để tham khảo?

Tôi muốn sử dụng một enum trong một bảng nhưng tôi lo lắng nếu nó lãng phí như lưu trữ một chuỗi trong mỗi hàng.

Trả lời

22

Nó chuyển đổi chúng thành số nguyên trên INSERT/UPDATE và quay lại chuỗi trên SELECT để bộ nhớ trong là số nguyên nhưng bạn không bị lộ.

Bạn có thể truy xuất số nguyên như SELECT mycolumn + 0.

Xem ENUMs in MySQL 5

2

Trước tiên, tôi sẽ không lo lắng về việc tiêu thụ không gian khi quyết định có hay không sử dụng một enum. Không gian đĩa vừa phong phú vừa rẻ tiền.

Thứ hai, nó lưu trữ các chuỗi trong định nghĩa cột và sau đó lưu trữ enum thích hợp trong mỗi bản ghi. Theo this giá trị được lưu trữ với mỗi bản ghi là đại diện số của vị trí giá trị trong enum.

+3

Nó không chỉ là không gian mà còn là tốc độ. Lấy một hàng nhỏ hơn là nhanh hơn, và tôi muốn JOIN trên một enum hơn một chuỗi. – Greg

+4

noah, trừ khi nó là một ứng dụng tầm thường, nếu không tôi hoàn toàn không đồng ý với đoạn đầu tiên của bạn – Pacerier

+1

Không thô lỗ, nhưng – William

2

Như được giải thích here, enums được lưu trữ dưới dạng giá trị giữa 0 (không có giá trị hợp lệ nào được đặt) và 65.535 được liên kết với chỉ mục điều tra. Giá trị được lưu trữ trong bảng là giá trị 2 byte, không phải là một chuỗi.

+3

Tôi nên thêm rằng nếu số lượng liệt kê là 255 hoặc ít hơn, chỉ ** 1 byte ** được sử dụng (tương tự tới TINYINT). (ref: mysql5 docs) – Sina

Các vấn đề liên quan