create table `mytable` (
id bigint primary key not null auto_increment,
column1 varchar(255),
column2 varchar(255)
) engine innodb charset utf8;並執行如下的建立復合索引的語句:
alter table `mytable` add unique (`column1`, `column2`);會得到如下的錯誤:
18:18:51 alter table `mytable` add unique (`column1`, `column2`)
error code: 1071. specified key was too long; max key length is 767 bytes 0.125 sec意思是指定的索太張了,超過最大索引大小767b的限制了。
在mysql 5.6及之前的版本,使用innodb作引擎的表的索引大小要小於767b,對於myisam的限制則是1000b。在mysql5.7之後此限制擴充套件到了3027b
如果你設定的乙個varchar欄位使用的是utf8mb4字符集,那麼索引最多可以儲存 767 / 4 = 191個這樣的字元。因為utf8mb4的字元每個佔4b的儲存空間,如果varchar使用utf8字符集,那麼索引最多可以儲存767 / 3 = 254個這樣的字元。因為使用utf8儲存的字元佔3b的儲存空間
減少索引列的長度
alter table `mytable` change column column1 column1 varchar(20), change column column2 column2 varchar(20);擷取列的一部分作為索引,而不是全部
alter table `mytable` add unique (`column1`(15), `column2`(15));
MySQL索引,MySQL中索引的限制?
mysql中索引的限制 1 myisam儲存引擎引鍵的長度綜合不能超過1000位元組 2 blob和text型別的列只能建立字首索引 3 mysql目前不支援函式索引 4 使用!或者 的時候mysql不能使用索引 5 過濾字段使用了函式運算的時候如 abs key sum key 的時候mysql無...
mysql 索引的限制
mysql中索引的限制 1 myisam儲存引擎引鍵的長度綜合不能超過1000位元組 2 blob和text型別的列只能建立字首索引 3 mysql目前不支援函式索引 4 使用!或者 的時候mysql不能使用索引 5 過濾字段使用了函式運算的時候如 abs key sum key 的時候mysql無...
Mysql 索引長度限制
在設定 utf8mb4 欄位的字元長度時,可能會丟擲乙個異常 specified key was too long max key length is 1000 bytes 也就是在給表的索引字段新增字元長度時,超過了最大索引長度 1000 位元組。關於索引長度的限制,最主要的因素就是儲存引擎和字符...