767 байт - это ограничение указанного префикса для таблиц InnoDB в MySQL версии 5.6 (и предыдущих версиях). Это длина 1000 байтов для таблиц MyISAM. В версии MySQL 5.7 и выше этот предел был увеличен до 3072 байт.
Вы также должны знать, что если вы устанавливаете индекс для большого поля типа char или varchar, кодируемого utf8mb4, вы должны разделить максимальную длину префикса индекса 767 байт (или 3072 байт) на 4, что приведет к 191. Это связано с тем, что максимальная длина символа utf8mb4 составляет четыре байта. Для символа utf8 это будет три байта, что приведет к максимальной длине префикса индекса 254.
Один из вариантов, который у вас есть, это просто установить нижний предел для ваших полей VARCHAR.
Другой вариант (согласно ответу на эту проблему ) - получить подмножество столбца, а не всю сумму, т. Е .:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Настройте, чтобы получить ключ для применения, но мне интересно, стоит ли пересматривать вашу модель данных относительно этой сущности, чтобы увидеть, есть ли улучшения, которые позволят вам реализовать намеченные бизнес-правила, не затрагивая MySQL ограничение.