2008-11-03 83 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字节的值,而不是一个字符串。