MySQL: Ошибка - Указан слишком длинный ключ. Максимальная длина ключа составляет 767 байт

Эта ошибка возникает из-за ограничения на максимальную длину индекса, которое в MySQL составляет 767 байт для таблиц с кодировкой utf8mb4. Поскольку каждый символ в utf8mb4 может занимать до 4 байт, максимальная длина индексируемого VARCHAR поля не может превышать 191 символ (767 байт / 4 байта на символ = 191.75).

Пример

Создаём таблицу Users в базе данных с кодировкой utf8mb4

CREATE TABLE Users (
	userId INT AUTO_INCREMENT PRIMARY KEY,
	userName VARCHAR(255) NOT NULL,
	email VARCHAR(255) NOT NULL UNIQUE
);

#1071 - Указан слишком длинный ключ. Максимальная длина ключа составляет 767 байт

Для поля email, которое должно быть уникальным и, следовательно, индексированным, это означает, что его длина должна быть ограничена 191 символом, если используется кодировка utf8mb4.

Чтобы исправить эту ошибку, можно уменьшить максимальную длину поля email до 191 символа или изменить кодировку таблицы на utf8, где каждый символ занимает максимум 3 байта, что позволяет увеличить максимальную длину до 255 символов при том же лимите индекса. Однако, utf8mb4 предпочтительнее, так как поддерживает все символы Unicode, включая эмодзи.

CREATE TABLE Users (
	userId INT AUTO_INCREMENT PRIMARY KEY,
	userName VARCHAR(255) NOT NULL,
	email VARCHAR(191) NOT NULL UNIQUE
);

Если изменение структуры таблицы для соответствия ограничениям не является приемлемым решением, можно рассмотреть возможность изменения настроек сервера MySQL. Например, начиная с версии 5.7.7, MySQL увеличил максимальный размер индекса для InnoDB таблиц до 3072 байт.

MySQL Просмотров: 293
Оценить код:

Комментарии

Ваш комментарий будет первым.
Войдите, чтобы оставить комментарий.