2017-04-18 89 views
1

我多次從10.0.29-MariaDB的-0ubuntu0.16.04.1在管線81MariaDB是否允許255個字符唯一索引?

ERROR 1071(42000)得到這個錯誤的Ubuntu 16.04:指定的鍵過長;最大關鍵 長度爲767個字節

目標通常是這樣的一行:

name VARCHAR(255) NOT NULL UNIQUE, 

它更改爲VARCHAR(63),使錯誤消失。這是MariaDB中的一個錯誤嗎?

+0

[#1071 - 指定的密鑰太長;最大密鑰長度是767字節](http://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes) – jmoerdyk

+0

@jmoerdyk - 該鏈接指的是'VARCHAR(500)utf8'。這裏的問題可能適用於'VARCHAR(255)utf8mb4'。 「解決方案」中有很多重疊,但我提供了一個可能更具體的解決方案。 –

回答

2

要解決此錯誤,請一個

解決方法:做3072字節的限制,而不是767

  • 變化255

    • 升級到5.7.7(或更新版本)一個191VARCHAR(假設你的數值不是太長)
    • ALTER .. CONVERT TO utf8 - 但這不允許表情符號和一些中文
    • 使用 「前綴」 指數(不明智)
    • 重新配置(爲5.6.3 - 5.7.6)(下)

    重新配置5.6.3或5.5.14:

    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) 
    

    (版本號基於Oracle的MySQL;對於這個問題,MariaDB版本號不同。)

  • +1

    在這方面,我不認爲在5.7中有魔術般的變化,除了修改後的默認值,這很容易配置,所以沒有必要爲此轉換版本。最後的建議應該完全適用於MariaDB 10.0,這些選項可以在配置文件中設置。對於MariaDB版本,相關性如下:10.0和10.1具有InnoDB 5.6,10.2具有InnoDB 5.7。 – elenst

    +0

    @elenst - 謝謝,我無法很快地發現5.x和10.x之間的映射。而且,是的,5.7「默認值」基本上防止了767再次發生。並在10.2.0中的相應代碼或者稍後稍微? –

    +0

    10.2.0有InnoDB 5.7,它在發佈時已經可用,但我不會推薦任何人使用任何分支的零版本來進行除alpha測試之外的任何操作。 10.2.5-rc是目前最新的10.2版本,它有InnoDB 5.7.14。接下來的10.2.6-ga預計會有InnoDB 5.7.18。 – elenst

    相關問題