767字節(jié)是規(guī)定前綴限制對(duì)于MySQL版本5.6中的InnoDB表(和以前的版本)。MyISAM表的長(zhǎng)度為1,000字節(jié)。在MySQL版本5.7及以上中,這個(gè)限制已經(jīng)增加到3072字節(jié)。
您還必須注意,如果您在一個(gè)大char或varchar字段上設(shè)置了一個(gè)索引,該字段是utf8mb4編碼的,則必須將最大索引前綴長(zhǎng)度767字節(jié)(或3072字節(jié))除以4,導(dǎo)致191字節(jié)。這是因?yàn)閡tf8mb4字符的最大長(zhǎng)度是4個(gè)字節(jié)。對(duì)于UTF 8字符,它將是三個(gè)字節(jié),導(dǎo)致最大索引前綴長(zhǎng)度為254。
您可以選擇只對(duì)VARCHAR字段設(shè)置下限。
另一個(gè)選項(xiàng)(根據(jù)對(duì)這一問(wèn)題的回應(yīng))是獲取列的子集,而不是整筆金額,即:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
雖然您需要獲得應(yīng)用的關(guān)鍵,但我不知道是否值得檢查有關(guān)該實(shí)體的數(shù)據(jù)模型,看看是否有改進(jìn)可以讓您實(shí)現(xiàn)預(yù)期的業(yè)務(wù)規(guī)則,而不會(huì)達(dá)到MySQL的限制。