MySQL索引長度限制


索引

  1. TextField是不支持建立索引的

  2. MySQL對索引字段長度有限制

    innodb引擎的每個索引列長度限制為767字節(bytes),所有組成索引列的長度和不能大於3072字節

    myisam引擎的每個索引列長度限制為1000字節,所有組成索引列的長度和不能大於1000字節

  3. 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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM