23

如果我有这样的表:

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

MySQL 会在每一行中存储这些字符串,还是在内部使用更小的整数(如整数)来知道要引用哪个枚举值?

我想在表格中使用枚举,但我担心它是否像在每一行中存储一个字符串一样浪费。

4

3 回答 3

32

它在 INSERT / UPDATE 上将它们转换为整数,然后在 SELECT 上转换回字符串,因此内部存储是整数,但您不会接触到它。

您可以检索整数,如SELECT mycolumn + 0.

请参阅MySQL 5 中的 ENUM

于 2008-11-03T18:47:06.097 回答
2

如此处所述,枚举存储为与枚举索引关联的 0(无有效值集)和 65,535 之间的值。存储在表中的值是 2 字节值,而不是字符串。

于 2008-11-03T18:49:07.463 回答
1

首先,在决定是否使用枚举时,我不会担心空间消耗。磁盘空间既充足又便宜。

其次,它将字符串存储在列定义中,然后在每条记录中存储适当的枚举。根据这一点,与每条记录一起存储的值是枚举中值位置的数字表示。

于 2008-11-03T18:48:07.700 回答