2017-09-06 100 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))

相關問題