MySQL ENUM选项值会影响最大行大小吗?

时间:2011-03-13 21:30:22

标签: mysql enums

我正在尝试使用MySQL枚举数据类型。我有一个表15列,其中7列是ENUM数据类型。无VARCHAR,最大列 - 类型DATETIME。所以我应该在mysql的65535字节限制范围内。即使在InnoDB的1000字节限制内。

ENUM类型有很多大字符串可能性(2列的范围为1000s)。我只是更改了表格,以便为表格添加更多的ENUM值

ALTER TABLE <tablename> MODIFY <enumCol> ([...1000 values each of max 40 bytes]);

之后又出现了这个错误 -

ERROR 1117 (HY000): Too many columns  

我对此进行了研究,发现此错误与MySql表的Max行大小有关。 另外,我在这里阅读http://dev.mysql.com/doc/refman/5.1/en/column-count-limit.html -

  

每个表都有一个包含表定义的.frm文件。服务器使用以下表达式来检查存储在文件中的一些表信息,而上限为64KB

这些ENUM值类型是否通过任何机会存储在此处,这会触发错误(使.frm文件> 64K)?或者是完全不同的事情?

1 个答案:

答案 0 :(得分:2)

According to the MySQL documentationENUM列只需要1到2个字节的存储空间,具体取决于枚举中的选项数量。所以它对行大小的影响最小。

但是,如果你有很长的字符串作为可能的枚举值,它不会影响你的行大小(因为只有索引存储在行中,而不是实际的字符串值),但可能超过64KB的限制表定义文件。