2008-11-03 98 views
16

如果我有這樣的一個表:MySQL如何存儲枚舉?

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

是MySQL的將那些字符串存儲每一行​​中,或內部將它使用像整數更小的東西要知道指的是枚舉值?

我想在表中使用一個枚舉,但我擔心如果像在每一行中存儲字符串一樣浪費。

回答

22

它將它們轉換爲INSERT/UPDATE上的整數,並返回SELECT上的字符串,因此內部存儲器是整數,但不會暴露於此。

您可以檢索像SELECT mycolumn + 0這樣的整數。

ENUMs in MySQL 5

2

首先,在決定是否使用一個枚舉時,我就不會擔心空間消耗。磁盤空間既豐富又便宜。

其次,它將字符串存儲在列定義中,然後在每條記錄中存儲適當的枚舉。根據this,每個記錄存儲的值是枚舉中值的位置的數字表示。

+3

它不僅僅是空間而且速度也是如此。檢索一個較小的行更快,我寧願加入枚舉比字符串。 – Greg 2008-11-03 18:50:02

+4

諾亞,除非它是一個平庸的應用程序,否則我完全不同意你的第一段 – Pacerier 2011-07-06 03:12:50

2

如解釋here所示,枚舉被存儲爲與枚舉索引相關聯的0(無效值集合)和65,535之間的值。存儲在表中的值是一個2字節的值,而不是一個字符串。