簡體   English   中英

無法添加外鍵約束 - 在引用的表中找不到索引

[英]Cannot add foreign key constraint - Cannot find an index in the referenced table

我目前正在嘗試添加一個關聯表,但其中一個外鍵失敗,並顯示此 InnoDB 狀態:

在引用的表中找不到索引,其中引用的列顯示為表中的第一列或列類型,並且引用的表與約束不匹配。 請注意,使用 >= InnoDB-4.1.12 創建的表中 ENUM 和 SET 的內部存儲類型發生了變化,並且舊表中的此類列不能被新表中的此類列引用。

被引用的表確實有一個主鍵。 它在同一個字符集/排序規則中。 它正在使用 InnoDB,並且主鍵與新表中的 FK 具有相同的類型。

它有一個名為 PRIMARY 的索引,其中 pk 列被選中並且是 #1。

這是被引用的表

CREATE TABLE `oauthtokens` (
  `useridentifier` varchar(100) CHARACTER SET utf8 NOT NULL,
  `guid` varchar(36) CHARACTER SET utf8 DEFAULT NULL,
  `accesstoken` varchar(100) CHARACTER SET utf8 NOT NULL,
  `refreshtoken` varchar(100) CHARACTER SET utf8 NOT NULL,
  `expirytime` varchar(45) CHARACTER SET utf8 NOT NULL,
  `is_master_user` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`useridentifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

這是我要創建的新表

CREATE TABLE `UserRoles` (
    `UserId` varchar(100) NOT NULL,
    `RoleId` int NOT NULL,
    PRIMARY KEY (`UserId`, `RoleId`),
    CONSTRAINT `FK_UserRoles_Roles_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `Roles` (`Id`) ON DELETE CASCADE,
    CONSTRAINT `FK_UserRoles_oauthtokens_UserId` FOREIGN KEY (`UserId`) REFERENCES `oauthtokens` (`useridentifier`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

FK_UserRoles_Roles_RoleId 有效,但 FK_UserRoles_oauthtokens_UserId 無效。

我在 8.0.17 上對此進行了測試並得到了錯誤:

錯誤 3780 (HY000):在外鍵約束 'FK_UserRoles_oauthtokens_UserId' 中引用列 'UserId' 和引用列 'useridentifier' 不兼容。

UserRoles.UserId正在使用表的默認字符集 utf8mb4,但您試圖使其引用使用字符集 utf8 的列oauthtokens.useridentifier

外鍵列和它引用的列必須使用相同的字符集和相同的排序規則。

我讓它以這種方式工作:

ALTER TABLE oauthtokens CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

然后添加外鍵就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM