2017-09-06 68 views
-1
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。最后我得到了这个错误。我该如何解决它?指定的密钥太长;最大密钥长度是767字节。 SQL错误:1071

+0

的[#1071可能的复制 - 指定的键过长;最大密钥长度是767字节](https://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes) – HoneyBadger

+0

你可以聪明这使文本值的散列唯一,而不是实际值。它节省了大量的空间。 – Mjh

回答

0

您使用的每个字符utf8mb4所以4个字节在最坏的情况下需要

最大密钥长度为767个字节为UTF8和字符utf8mb4 字符

多个选项:

  • 使用不同的字符集
  • 减少的字符数所需的
  • 建立在更短的前缀唯一性约束,如:

    (唯一索引UQ_Discounts_CatalogCode'(“Catalog_Id” ASC“代码”( 191)ASC))

相关问题