sql >> Base de Datos >  >> RDS >> Mysql

MySQL Error #1071 - La clave especificada era demasiado larga; la longitud máxima de la clave es de 767 bytes

767 bytes en MySQL versión 5.6 (y versiones anteriores), es la limitación de prefijo establecida para tablas InnoDB. Tiene una longitud de 1000 bytes para las tablas MyISAM. Este límite se ha aumentado a 3072 bytes en MySQL versión 5.7 (y hacia arriba).

También debe tener en cuenta que si establece un índice en un carácter grande o varchar campo que es utf8mb4 codificado, debe dividir la longitud máxima del prefijo de índice de 767 bytes (o 3072 bytes) por 4, lo que da como resultado 191 . Esto se debe a que la longitud máxima de un utf8mb4 carácter es de cuatro bytes. Para un utf8 carácter sería de tres bytes, lo que da como resultado una longitud máxima de prefijo de índice de 255 (o menos el terminador nulo, 254 caracteres).

Una opción que tiene es simplemente colocar un límite inferior en su VARCHAR campos.

Otra opción (según la respuesta a este problema ) es obtener el subconjunto de la columna en lugar de la cantidad total, es decir:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Modifique según sea necesario para obtener la clave para aplicar, pero me pregunto si valdría la pena revisar su modelo de datos con respecto a esta entidad para ver si hay posibles mejoras, lo que le permitiría implementar las reglas comerciales previstas sin alcanzar la limitación de MySQL. .