如果我有这样的表:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
MySQL 会在每一行中存储这些字符串,还是在内部使用更小的整数(如整数)来知道要引用哪个枚举值?
我想在表格中使用枚举,但我担心它是否像在每一行中存储一个字符串一样浪费。
它在 INSERT / UPDATE 上将它们转换为整数,然后在 SELECT 上转换回字符串,因此内部存储是整数,但您不会接触到它。
您可以检索整数,如SELECT mycolumn + 0
.
如此处所述,枚举存储为与枚举索引关联的 0(无有效值集)和 65,535 之间的值。存储在表中的值是 2 字节值,而不是字符串。
首先,在决定是否使用枚举时,我不会担心空间消耗。磁盘空间既充足又便宜。
其次,它将字符串存储在列定义中,然后在每条记录中存储适当的枚举。根据这一点,与每条记录一起存储的值是枚举中值位置的数字表示。