1. 程式人生 > 資料庫 >MySQL索引長度限制原理解析

MySQL索引長度限制原理解析

這篇文章主要介紹了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;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。