テーブルあたり 4096カラムというハード制限がありますが、特定のテーブルでは有効な最大数がこれより少なくなる可能性があります。正確な制限は、相互作用する複数の要因によって異なります。
すべてのテーブル (ストレージエンジンには無関係) の最大行サイズは 65,535 バイトです。ストレージエンジンではこの制限に対してさらなる制約を加えられる場合があり、有効な最大行サイズは少なくなります。
すべてのカラムの合計長は最大行サイズを超えられないので、このサイズはカラム数 (およびサイズの可能性もあり) を制約します。たとえば、
utf8型
文字では、文字あたり最大 3.バイトが必要になるので、CHAR(255)字符集utf8
カラムの場合、サーバーは値ごとに 255 × 3 = 765 バイトを割り当てる必要があります。この結果、テーブルにはこのようなカラムを 65,535 / 765 = 85 以上は含められません。可変長カラムのストレージには長さバイトが含まれ、これには行サイズに対して評価されます。たとえば、
VARCHAR(255)字符集utf8
カラムは、値の長さを格納するために 2.バイトを使用するので、それぞれの値は最大 767バイトを使用できます。斑点
カラムと文本
カラムは、その内容が行の残りとは別に格納されるので、行サイズに対してそれぞれ 9から 12 (1から4+8) バイトになります。カラムを
无效的
と宣言すると、使用できるカラムの最大数を減らすことができます。密萨姆
テーブルの場合、无效的
カラムは、値が无效的
であるかどうかを記録するための追加領域を行内に必要とします。各无效的
カラムは 1.ビット余分に占め、もっとも近いバイトまで丸められます。バイトでの最大の行長は次のように計算できます。行长=1+(列长度总和) + (空列数+删除\u标志+ 7)/8 + (可变长度列数)
删除\u标志
は静的行フォーマットのテーブルに対しては 1.です。静的テーブルは、行が削除されているかどうかを示すフラグとして、行レコード内の 1.ビットを使用します。このフラグは動的行ヘッダーに格納されるので、動的テーブルの場合、删除\u标志
は 0です。密萨姆
テーブル形式の詳細は、セクション15.2.3「MyISAM」テーブルのストレージフォーマット」を参照してください。InnoDB公司
テーブルの場合、ストレージサイズは、无效的
カラムおよび不为空
カラムの場合と同じなので、前述の計算は適用されません。カラムが必要とするサイズが 32,765 + 2 バイトと 32,766 + 2 バイトであり、65,535 バイトの最大行サイズ以内に収まるので、テーブル
t1级
を作成する次のステートメントは成功します。mysql>创建表t1->(c1 VARCHAR(32765)NOT NULL,c2 VARCHAR(32766)NOT NULL)->引擎=MyISAM字符集1;查询正常,0行受影响(0.02秒)
カラムは
无效的
であり、密萨姆
が必要とする追加領域によって行サイズが 65,535 バイトを超えるので、テーブルt2级
を作成する次のステートメントは失敗します。mysql>创建表t2->(c1 VARCHAR(32765)NULL,c2 VARCHAR(32766)NULL)->引擎=MyISAM字符集1;错误1118(42000):行大小太大。所用表类型(不包括blob)的最大行大小为65535。必须将某些列更改为TEXT或blob
カラム長は 65,535 バイトの最大長内に収まっていますが、長さを記録するために 2.つの追加バイトが必要になり、このため行サイズが 65,535 バイトを超えるので、テーブル
t3级
を作成する次のステートメントは失敗します。mysql>创建表t3->(c1 VARCHAR(65535)NOT NULL)->引擎=MyISAM字符集1;错误1118(42000):行大小太大。所用表类型(不包括blob)的最大行大小为65535。必须将某些列更改为TEXT或blob
カラム長を 65,533 以下に減らすと、ステートメントは成功します。
個々のストレージエンジンで、テーブルカラム数を制限するその他の制約が適用される場合があります。例:
InnoDB公司
が許可するカラム数は最大 1000です。InnoDB公司
は、データベースページ (約 8,000 バイト) の半分以下に行サイズを制限し、变量二进制
、瓦尔查尔
、斑点
、または文本
カラムを含みません。異なる
InnoDB公司
ストレージフォーマット (压缩的
、冗余
) では、使用するページヘッダーおよびトレーラデータの量が違うため、行に使用できるストレージ量に影響がおよびます。
それぞれのテーブルにはテーブル定義を含む
.frm公司
ファイルがあります。この定義は、テーブルで許可されるカラム数に影響する方法でこのファイルの内容に影響を与えます。詳細は、セクションD.10.5.财务报表ファイル構造により課せられる制限」を参照してください。