【问题标题】:How Does MySQL Store Enums?MySQL 如何存储枚举?
【发布时间】:2010-09-20 13:08:18
【问题描述】:

如果我有这样的表:

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

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

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

【问题讨论】:

    标签: mysql enums types


    【解决方案1】:

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

    你可以像SELECT mycolumn + 0这样检索整数。

    ENUMs in MySQL 5

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我要补充一点,如果枚举数为 255 或更少,则仅使用 1 字节(类似于 TINYINT)。 (参考:mysql5 文档)
      【解决方案3】:

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

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

      【讨论】:

      • 不仅是空间,还有速度。检索较小的行更快,我宁愿加入枚举而不是字符串。
      • noah,除非它是一个平庸的应用程序,否则我完全不同意你的第一段
      猜你喜欢
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2011-03-28
      • 2019-10-02
      • 1970-01-01
      • 2017-12-08
      • 2018-06-14
      相关资源
      最近更新 更多