それぞれのテーブルにはテーブル定義を含む .frm
ファイルがあります。サーバーは次の式を使用して、64K バイトの上限に対して、ファイルに格納されたいくつかのテーブル情報をチェックします。
if (info_length+(ulong) create_fields.elements*FCOMP+288+
n_length+int_length+com_length > 65535L || int_count > 255)
.frm
ファイルに格納された情報のうち式に対してチェックされる部分は 64K バイトの制限を超えることはできません。したがって、テーブル定義がこのサイズに達した場合、これ以上カラムを追加できません。
式の関連因子は次のとおりです。
info_length
は、「画面」に必要な領域です。これは MySQL の Unireg から継承したものです。create_fields.elements
はカラム数です。FCOMP
は 17 です。n_length
は、名前あたり 1 バイトの区切り文字を含む、すべてのカラム名の合計長です。int_length
は、ENUM
およびSET
カラムの値のリストに関連します。このコンテキストでは、「int」 は「整数」の意味ではありません。これは「間隔」を意味し、ENUM
およびSET
カラムの総称です。int_count
は、一意のENUM
およびSET
定義の数です。com_length
はカラムコメントの合計長です。
前述の式には、許可されるテーブル定義に対し複数の意味があります。
長いカラム名を使用すると、
ENUM
またはSET
カラムを含めたり、カラムコメントを使用したりした場合と同様に、カラムの最大数が減ることがあります。-
テーブルに保持できる一意の
ENUM
およびSET
定義は 255 以下です。同一要素リストを持つカラムは、この制限に対して同じと見なされます。たとえば、次の 2 つのカラムがテーブルに含まれる場合、これらは定義が同一なので、この制限に対して (2 つではなく) 1 つと見なされます。e1 ENUM('a','b','c') e2 ENUM('a','b','c')
一意の
ENUM
およびSET
定義内の要素名の合計長は、64K バイトの制限に対して加えられるので、特定のENUM
カラムの要素の数に対する理論的な制限は 65,535 ですが、実際の限度は 3000 未満です。