0

我試圖創建一個FK但MySQL不允許它...MySQL的大FK標識

Identifier name 'foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_PRODUCT_ENTITY' is too long [ CREATE TABLE `foobarbaz_weee_discount` ( `entity_id` int(10) unsigned NOT NULL DEFAULT '0', `website_id` smallint(5) unsigned NOT NULL DEFAULT '0', `customer_group_id` smallint(5) unsigned NOT NULL, `value` decimal(12,4) NOT NULL DEFAULT '0.0000', KEY `foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_WEBSITE` (`website_id`), KEY `foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_PRODUCT_ENTITY` (`entity_id`), KEY `foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_GROUP` (`customer_group_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; ] 

有沒有一種方式來增加大FKS? 謝謝。

回答

1

我對此表示懷疑。您可以嘗試更改系統表的外鍵數據類型。然而,我從來沒有試圖改變系統表,因此不知道如果甚至有可能會出現任何複雜情況。

5

不,它被硬編碼到MySQL中,請參閱the docs(朝向頁面底部)。但它與FK的名稱無關。它的索引名稱太長(最多64個字符):

`Identifier`     `Maximum Length (characters)` 
Database      64 
Table       64 
Column      64 
Index       64 
Constraint     64 
Stored Procedure or Function 64 
Trigger      64 
View       64 
Alias       256 (see exception following table) 
Compound Statement Label  16 
1

外鍵不是問題。這是名稱的關鍵。我同意MySQL,'foobarbaz_FK_CATALOG_PRODUCT_ENTITY_WEEE_DISCOUNT_PRODUCT_ENTITY'有點傻:)

你有兩次「PRODUCT_ENTITY」的名字。開始丟棄:)

0

它看起來像這可能是一個錯誤。這是我找到的報告。我沒有看到它已經被修補,但你可以重新命名你的密鑰,以便長度更短。

http://bugs.mysql.com/bug.php?id=13942