Specified key was too long; max key length is 1000 bytes

MySQL 5.7 (кодировка utf8mb4)
Скрипт 10-cuba\init\mysql\create-db.sql выдаёт ошибку

Failed to execute: 
create unique index IDX_SEC_ROLE_UNIQ_NAME on SEC_ROLE (NAME, SYS_TENANT_ID_NN, DELETE_TS_NN) 
because: Specified key was too long; max key length is 1000 bytes

Есть какое-либо лекарство от этого?

Проблема проявляется при использовании хранилища MyISAM с кодировкой utf8 или utf8mb4, на любой 5-ой или 8-ой версии MySQL. Решение проблемы в использовании префиксного индекса вместо полного, ограничив максимальную длину индексируемой строки до соответствующего значения. Например:

create unique index IDX_SEC_ROLE_UNIQ_NAME on 
SEC_ROLE (NAME**(150)**, SYS_TENANT_ID_NN**(50)**, DELETE_TS_NN**(50)**) 

При указанных сочетаниях максимальная длина индексируемой строки должна быть около 250 символов (1 символ utf8 - 3 байта, utf8mb4 - 4 байта).

(stackoverflow) #1071 - Specified key was too long; max key length is 1000 bytes

Тут, я так понимаю, что-то надо внутри Кубы править… Не хотелось бы кастомизировать платформу, будут проблемы при обновлении версии.

А как так получилось, что в вашей БД три этих поля не влезают в 250 символов? Наверное у вас либо очень длинные названия ролей, либо очень длинные SYS_TENANT_ID_NN. Вы не смотрели, какие значения лежат в таблице?

В случае префиксного индекса уникальность будет не полная, а по части строки насколько понимаю. В этом случае, насколько я понимаю, в UI можно создать роли с одинаковым именем, что не желательно для системы.
Создали тикет на проблему: https://github.com/cuba-platform/cuba/issues/2943, будем смотреть возможно ли ее исправить.

Как же посмотреть если база не создаётся?
Ошибка возникает при генерации новой, фактически пустой, базы. У меня там ещё никаких ролей нет, это ваши, Кубинские роли.

Я так понимаю, что если по умолчанию у вас текстовые поля 255 символов, то это поле NAME как раз и съедает всё.

При использовании HSQLDB или даже MySQL с хранилищем INNODB ошибки нет.

Т.е. он даже потенциально не позволяет создать составной индекс по нескольким varchar(255) полям?
Боже мой, MySQL + MyISAM это какой-то кошмар, зачем вы его используете…

Вы же в курсе:

не является устойчивой к сбоям и не выполняет требования ACID