Как добавить миграцию в базу данных MYSQL? - PullRequest
1 голос
/ 06 июня 2019

Я только что разместил свой сайт .Net-core на smarterasp.net, но когда я попытался обновить базу данных на MYSql, я получаю сообщение об ошибке

Failed executing DbCommand (397ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

CREATE TABLE `AspNetUserRoles` (
    `UserId` varchar(255) NOT NULL,
    `RoleId` varchar(255) NOT NULL,
    CONSTRAINT `PK_AspNetUserRoles` PRIMARY KEY (`UserId`, `RoleId`),
    CONSTRAINT `FK_AspNetUserRoles_AspNetRoles_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `AspNetRoles` (`Id`) ON DELETE CASCADE,
    CONSTRAINT `FK_AspNetUserRoles_AspNetUsers_UserId` FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE CASCADE
);

Указанный ключ был слишком длинным; максимальная длина ключа 1000 байтов

, и мой сайт показывает это на домашней странице

1 Ответ

1 голос
/ 06 июня 2019

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 . Вы можете красный больше здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...