2011-03-13 27 views
0

我正在試驗MySQL枚舉數據類型。我有一個表15列,其中7個是ENUM數據類型。否VARCHARs,最大列類型DATETIME。所以我應該在mysql的65535字節限制內。即使在InnoDB的1000字節限制內。MySQL ENUM選項值影響最大行大小?

ENUM類型有很多很大的字符串可能性(範圍在1000列2列)。我只是改變了表更ENUM值添加到表

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

而且─

ERROR 1117 (HY000): Too many columns 

我研究這個,發現這個錯誤是關係到最大行大小後得到這個錯誤MySql表。 另外,我讀到這裏http://dev.mysql.com/doc/refman/5.1/en/column-count-limit.html是 -

每個表都有一個包含表定義的.frm文件。服務器使用下面的表達式來檢查一些存儲在文件中針對64KB

難道這些枚舉值類型入門萬一存放在這裏的上限表信息,這觸發錯誤(使.FRM文件> 64K)?還是其他事情正在發生?

+0

errrm - 讓我說明一下,您最多使用7個枚舉列,每列可能有0到1000個值? – 2011-03-13 21:37:24

+0

其中只有一個有1000個值。休息是在50至100的範圍內。我已閱讀關於ENUMS的優點和缺點,我想測試它可以給我多少速度改善。測試樣品有11百萬行。 – Jai 2011-03-13 21:44:00

回答

2

According to the MySQL documentationENUM列應該只佔用1到2個字節的存儲空間,具體取決於枚舉中的選項數量。所以它對行大小的影響應該是最小的。但是,如果你有很長的字符串作爲可能的枚舉值,它不會影響你的行大小(因爲只有索引存儲在行中,而不是實際的字符串值),但可能會超過64KB的限制的表格定義文件。

+0

會超過64KB限制會導致此錯誤嗎? – Jai 2011-03-13 23:19:30

+0

@Jai:可能。似乎沒有一個特定的錯誤,因爲列數太多會導致大部分時間。 – 2011-03-13 23:36:58

+0

我已經拋棄了ENUM。它確實在1000個值之後停止。想知道如果這也可能觸發了這個錯誤。 – Jai 2011-03-14 10:39:37

相關問題