1071: Specified key was too long; max key length is 767 bytes (clave demasiado larga; máximo 767 bytes)
MySQL¿Qué significa?
El índice (o clave) que se está creando superó la longitud máxima permitida en bytes. Sobre todo con conjuntos de caracteres multibyte, los índices VARCHAR alcanzan rápidamente este límite.
¿Por qué ocurre?
Un índice sobre una columna VARCHAR ancha con utf8mb4 (4 bytes por carácter); un formato de fila InnoDB antiguo (REDUNDANT/COMPACT; en 5.7 y anteriores también innodb_large_prefix deshabilitado); la longitud total de un índice compuesto de varias columnas que supera el límite; una clave primaria grande.
Cómo solucionarlo
Acorte la longitud de la columna indexada o use un índice de prefijo: CREATE INDEX idx ON my_table (my_column(191)); Pase al límite de 3072 bytes con el formato de fila DYNAMIC/COMPRESSED (DYNAMIC es el predeterminado en MySQL 8.0; innodb_large_prefix se eliminó en 8.0 y solo es necesario en 5.7 y anteriores). Si es necesario, revise el conjunto de caracteres/longitud de la columna.
Más entradas de este motor
- 1048Column 'x' cannot be null (la columna no puede ser nula)
- 1292Incorrect datetime value / truncated incorrect value (valor de fecha/hora incorrecto / valor truncado)
- 1406Data too long for column (datos demasiado largos para la columna)
- 1050Table already exists (la tabla ya existe)
- 1051Unknown table 'x' (tabla desconocida)
- 1091Can't DROP 'x'; check that column/key exists (no se puede hacer DROP; compruebe que existe la columna/clave)
- 1093You can't specify target table 'x' for update in FROM clause (no se puede usar la tabla de destino del update en FROM)