【问题标题】:How do I add migration to MYSQL database?如何添加迁移到 MYSQL 数据库?
【发布时间】:2019-06-06 21:18:11
【问题描述】:

我刚刚将我的 .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 字节

and my site is showing this in homepage

【问题讨论】:

  • 此表的默认字符集是什么?

标签: mysql .net-core hosting entity-framework-migrations


【解决方案1】:

MySql 对最大索引键长度有限制。当您加入 UserId 和 RoleId 时,它会导致索引的长键(它以字节为单位,而不是字符),因此您应该将配置文件中的 innodb_large_prefix 的配置更改为 ON。正如 mysql 文档所说,这会将您的索引键前缀设置为最多 3072 个字节。

[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 个字节。

你可以看看mysqldocummentation 你可以多红here

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 2018-07-19
    • 2015-09-21
    • 2016-08-22
    • 2011-10-26
    • 1970-01-01
    • 2021-09-18
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多