Límite de longitud del índice MySQL

Indice

 

 

TextField no admite indexación

 

MySQL tiene un límite en la longitud del campo de índice

 

La longitud de cada columna de índice del motor innodb está limitada a 767 bytes (bytes), y la longitud total de todas las columnas de índice no puede ser superior a 3072 bytes

 

La longitud de cada columna de índice del motor myisam está limitada a 1000 bytes, y la suma de la longitud de todas las columnas de índice constituyentes no puede ser mayor de 1000 bytes.

 

La longitud máxima de varchar se refiere a la longitud de los caracteres. Si el juego de caracteres de la base de datos es utf-8, un carácter ocupa 3 bytes. Por lo tanto, bajo el conjunto de caracteres utf-8, la longitud del índice de una sola columna creado por el motor innodb no puede exceder los 255 caracteres

 

Diferentes límites de longitud de índice debido a diferentes versiones de MySQL

 

En la versión MySQL 5.5, se introdujo innodb_large_prefix para deshabilitar índices de prefijos grandes para que sean compatibles con versiones anteriores de InnoDB que no admiten prefijos de clave de índice grandes

 

Activar innodb_large_prefix puede hacer que el límite de longitud del índice único alcance los 3072 bytes (pero el límite de longitud total del índice conjunto sigue siendo 3072 bytes), cuando está deshabilitado, el límite de longitud del índice único es 767 bytes

 

En las versiones MySQL 5.5 y MySQL 5.6, innodb_large_prefix está desactivado de forma predeterminada, y en MySQL 5.7 y superior está activado de forma predeterminada

 

En la versión MySQL8.0, innodb_large_prefix ha sido eliminado

 

Es por eso que puedo crear un índice de 1024 caracteres (3072 bytes en el conjunto de caracteres utf8) en mi propia máquina (MySQL8.0), pero no en el servidor (MySQL5.5)

 

Script para probar la limitación de longitud del índice:

 

prueba de uso;

descartar tabla si existe test_index_len;

crear mesa 

test_index_len (clave primaria long_char varchar (1025)) ENGINE = InnoDB charset = utf8;

prueba de uso;

descartar tabla si existe test_index_len;

crear mesa 

test_index_len (

 long_char varchar (24),

    origin_str varchar (1000),

    clave test_index (long_char, 哦 rigin_str)) ENGINE = InnoDB charset = utf8;

Supongo que te gusta

Origin www.cnblogs.com/xiami2046/p/12723727.html
Recomendado
Clasificación