MySQL Varchar の長さをどれくらいに設定する必要がありますか

ストレージ制限

1. varchar フィールドには、クラスター化インデックスの外側に実際のコンテンツが個別に格納されます。コンテンツは実際の長さを示す 1 ~ 2 バイトで始まります (長さが 255 を超える場合は 2 バイトが必要です)。そのため、最大長は 65535 を超えることはできません。
2. varchar フィールドに not null が定義されていない場合、デフォルトの null も 1 バイトを占める必要があります。
3. mysql テーブルの 1 行のすべての列が占める最大長は (他の非表示の列とレコード ヘッダー情報を除く) 65535 バイトです。

コード長制限

1. 文字タイプが gbk の場合、各文字は最大 2 バイトを占有し、最大長は 32766 を超えることはできません。 2.
文字タイプが utf8 の場合、各文字は最大 3 バイトを占有し、最大長は 32766 を超えることはできません。 21845。
3. 英語が多いフォーラムの場合、GBK を使用する場合は各文字が 2 バイトを占めますが、UTF-8 英語を使用する場合は 1 バイトのみを占めます。
4. 上記の制限を超えて定義した場合、varchar フィールドは強制的にテキスト型に変換され、警告が生成されます。
5. lantin1 文字セットに格納される各値は 1 バイトを占めます。

行の長さ制限

実際のアプリケーションで varchar の長さ制限の原因となるのは、行定義の長さです。MySQL では、定義された行の長さが 65535 を超えることができない必要があります。定義されたテーブルの長さがこの値を超えると、
  「エラー 1118 (42000): 行サイズが大きすぎます。使用されるテーブル タイプの最大行サイズ (BLOB を除く) は 65535 です。一部の列を TEXT または BLOB に変更する必要があります。」 。

計算例


1. テーブルに varchar 型が 1 つだけある場合(create table t4(c varchar(N)) charset=gbk;として定義されている場合など)
、ここでの N の最大値は (65535-1-2)/2= 32766 です。1 を引く理由は、実際の行ストレージが 2 バイト目から始まるためです。2 を引く理由は、varchar ヘッダーの 2 バイトが長さを示すためです。2 で割る理由は、文字エンコーディングが gbk であるためです。

b) テーブルが
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;として定義されている場合
、ここでの N の最大値は (65535-1-2-4-30 3)です。 ) /3=21812
マイナス 1 とマイナス 2 は上の例と同じ、マイナス 4 の理由は int 型の c が 4 バイトを占有しているため、
マイナス 30
と 3 の理由は char(30) が 90 バイトを占有しているため、そしてエンコードはutf8です。
varchar が上記の b ルールを超えて強制的にテキスト型に変換される場合、各フィールドは 11 バイトの定義された長さを占めますが、当然、これは「varchar」ではなくなります。

Guess you like

Origin blog.csdn.net/xiaowanzi_zj/article/details/131651804