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