索引
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;