MySQL如何存储枚举?

时间:2008-11-03 18:43:05

标签: mysql enums types

如果我有这样的表:

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

MySQL是否会在每一行中存储这些字符串,或者在内部使用像整数那样小的东西来知道要引用哪个枚举值?

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

3 个答案:

答案 0 :(得分:23)

它将它们转换为INSERT / UPDATE上的整数并返回到SELECT上的字符串,这样内部存储就像整数一样,但是你没有接触到它。

您可以检索SELECT mycolumn + 0之类的整数。

请参阅ENUMs in MySQL 5

答案 1 :(得分:2)

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

其次,它将字符串存储在列定义中,然后在每个记录中存储相应的枚举。根据{{​​3}},每条记录存储的值是枚举中值位置的数字表示。

答案 2 :(得分:2)

正如here所解释的,枚举存储为0(无有效值集)和65,535之间的值,这些值与枚举索引相关联。存储在表中的值是2字节值,而不是字符串。