CREATE TABLE IF NOT EXISTS `dbo`.`Discounts` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Description` LONGTEXT CHARACTER SET 'utf8mb4' NULL,
`Code` VARCHAR(255) CHARACTER SET 'utf8mb4' NULL,
`Catalog_Id` INT NULL,
PRIMARY KEY (`Id`),
UNIQUE INDEX `UQ_Discounts_CatalogCode` (`Catalog_Id` ASC, `Code`(255) ASC),
CONSTRAINT `Discount_Catalog`
FOREIGN KEY (`Catalog_Id`)
REFERENCES `dbo`.`Catalogs` (`Id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
我打算将数据从SSMS迁移到mysql。最后我收到了这个错误。我该如何解决?
答案 0 :(得分:0)
您正在使用utf8mb4,因此在最坏的情况下每个字符需要4个字节
utf8mb4的 utf8 和 191 字符的 255 字符的最大密钥长度为767个字节强>
多个选项:
在较短的前缀上构建唯一性约束,如下所示:
(UNIQUE INDEX'UQ_Discounts_CatalogCode'('Catalog_Id'ASC,'Code'(191)ASC))
答案 1 :(得分:0)
您可以使用Barracuda
文件格式并启用innodb_large_prefix
变量来避免该错误。
有关详细信息,请参阅我的博文:http://mechanics.flite.com/blog/2014/07/29/using-innodb-large-prefix-to-avoid-error-1071/