MySQLインデックスの長さ制限

索引

 

 

TextFieldはインデックス作成をサポートしていません

 

MySQLにはインデックスフィールドの長さに制限があります

 

innodbエンジンの各インデックス列の長さは767バイト(バイト)に制限されており、すべてのインデックス列の長さの合計は3072バイトを超えることはできません

 

myisamエンジンの各インデックス列の長さは1000バイトに制限されており、すべての構成インデックス列の長さの合計は1000バイトを超えることはできません。

 

varcharの最大長は文字の長さを指し、データベースの文字セットがutf-8の場合、1文字が3バイトを占有します。したがって、utf-8文字セットでは、innodbエンジンによって作成される単一列のインデックスの長さが255文字を超えることはできません。

 

MySQLのバージョンの違いによるインデックスの長さの制限の違い

 

MySQL 5.5バージョンでは、大きなプレフィックスインデックスを無効にするためにinnodb_large_prefixが導入され、大きなインデックスキープレフィックスをサポートしない以前のバージョンのInnoDBと互換性があります。

 

innodb_large_prefixをオンにすると、単一インデックスの長さ制限が3072バイトに達する可能性があります(ただし、結合インデックスの合計の長さ制限は3072バイトです)。無効にすると、単一インデックスの長さ制限は767バイトになります。

 

MySQL 5.5およびMySQL 5.6バージョンでは、innodb_large_prefixはデフォルトでオフになっており、MySQL 5.7以降ではデフォルトでオンになっています。

 

MySQL8.0バージョンでは、innodb_large_prefixが削除されました

 

これが、自分のマシン(MySQL8.0)では1024文字(utf8文字セットで3072バイト)のインデックスを作成できるが、サーバー(MySQL5.5)では作成できない理由です。

 

インデックスの長さ制限をテストするスクリプト:

 

テストを使用します。

存在する場合はテーブルを削除test_index_len;

テーブルを作成する 

test_index_len(long_char varchar(1025)主キー)ENGINE = InnoDB charset = utf8;

テストを使用します。

存在する場合はテーブルを削除test_index_len;

テーブルを作成する 

test_index_len(

 long_char varchar(24)、

    origin_str varchar(1000)、

    key test_index(long_char、уrigin_str))ENGINE = InnoDB charset = utf8;

おすすめ

転載: www.cnblogs.com/xiami2046/p/12723727.html