如果我有这样的表:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
MySQL是否会在每一行中存储这些字符串,或者在内部使用像整数那样小的东西来知道要引用哪个枚举值?
我想在表中使用枚举,但我担心它是否像在每行中存储字符串一样浪费。
答案 0 :(得分:23)
它将它们转换为INSERT / UPDATE上的整数并返回到SELECT上的字符串,这样内部存储就像整数一样,但是你没有接触到它。
您可以检索SELECT mycolumn + 0
之类的整数。
答案 1 :(得分:2)
首先,在决定是否使用枚举时,我不担心空间消耗。磁盘空间既丰富又便宜。
其次,它将字符串存储在列定义中,然后在每个记录中存储相应的枚举。根据{{3}},每条记录存储的值是枚举中值位置的数字表示。
答案 2 :(得分:2)
正如here所解释的,枚举存储为0(无有效值集)和65,535之间的值,这些值与枚举索引相关联。存储在表中的值是2字节值,而不是字符串。