MySQL索引長度限制原理解析
阿新 • • 發佈:2020-01-09
這篇文章主要介紹了MySQL索引長度限制原理解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
索引
TextField是不支援建立索引的
MySQL對索引欄位長度有限制
innodb引擎的每個索引列長度限制為767位元組(bytes),所有組成索引列的長度和不能大於3072位元組
myisam引擎的每個索引列長度限制為1000位元組,所有組成索引列的長度和不能大於1000位元組
varchar的最大長度是指字元長度,若資料庫字符集為utf-8,則一個字元佔3個bytes。因此在utf-8字符集下,innodb引擎建立的單列索引長度不能超過255個字元
mysql版本不同而導致的索引長度限制不同
在MySQL5.5版本,引入了innodb_large_prefix,用來禁用大型字首索引,以便與不支援大索引鍵字首的早期版本的InnoDB相容
開啟innodb_large_prefix可以使單索引的長度限制達到3072位元組(但是聯合索引總長度限制還是3072位元組),禁用時單索引的長度限制為767位元組
在MySQL5.5版本與MySQL5.6版本,innodb_large_prefix是預設關閉的,在MySQL5.7及以上版本則預設開啟
在MySQL8.0版本中,innodb_large_prefix已被移除
這就是我在自己機器(MySQL8.0)上可以建立1024字元(utf8字符集下表示3072位元組)長的索引,而在伺服器(MySQL5.5)上不行的原因
測試索引長度限制的指令碼:
use test; drop table if exists test_index_len; create table test_index_len(long_char varchar(1025) primary key) ENGINE=InnoDB charset=utf8;
use test; drop table if exists test_index_len; create table test_index_len( long_char varchar(24),origin_str varchar(1000),key test_index(long_char,origin_str)) ENGINE=InnoDB charset=utf8;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。