MySql имеет ограничение на максимальную длину ключа индекса. Когда вы присоединяетесь к UserId и RoleId, это приводит к длинному ключу для индекса (в байтах, а не в символах), поэтому вам следует изменить конфигурацию для innodb_large_prefix в вашем файле конфигурации на ON. Это установит ваши префиксы ключа индекса до 3072 байт, как говорит документ mysql.
[mysqld]
innodb_large_prefix = 1
Вам также необходимо изменить:
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_large_prefix=1;
logout & login (to get the global values);
ALTER TABLE tbl ROW_FORMAT=DYNAMIC; -- (or COMPRESSED)
Поскольку вы используете для ключа 255 * 2 символа, это может привести (в зависимости от вашего набора символов по умолчанию) к более чем 1000 байтов.
Вы можете взглянуть на документацию mysql .
Вы можете красный больше здесь