此问题已在此处有答案:
MySQL Creating tables with Foreign Keys giving errno: 150(20个回答)
2天前关闭。
我有两个表,entity
和entity_role
。entity
看起来像这样:
CREATE TABLE `entity` (
`id` varchar(36) NOT NULL,
`type` varchar(36) NOT NULL,
`name` varchar(150) NOT NULL,
PRIMARY KEY (`id`,`type`)
);
entity_role
看起来像这样:
CREATE TABLE `entity_role` (
`id` varchar(36) NOT NULL,
`entity_type` varchar(36) DEFAULT NULL,
`user_id` varchar(36) NOT NULL,
`role_id` varchar(36) NOT NULL,
`entity_id` varchar(36) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_entity_role_user_id` (`user_id`),
KEY `FK_entity_role_role_id` (`role_id`),
CONSTRAINT `FK_entity_role_role_id` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`),
CONSTRAINT `FK_entity_role_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
);
我正在尝试通过运行以下语句将外键引用从entity_role
添加到entity
:
alter table entity_role add constraint `FK_entity_role_entity`
foreign key(`entity_id`, `entity_type`)
references `entity`(`id`, `type`)
on delete cascade;
我从服务器返回:[代码:1005,SQL状态:HY000](conn=26)无法创建表entity_role
(错误号:150“外键约束格式不正确”)
我已经看了很多次,并阅读了MariaDB文档几次,我觉得我现在正在用头撞墙。有人知道我做错了什么吗?这两个表都使用InnoDB引擎。
1条答案
按热度按时间kknvjkwl1#
原来the answer to this question正是我要找的。具体来说,MariaDB不会告诉你为什么它不喜欢你的外键,除非你去问特定的引擎:
不会张贴文字墙,但这一行特别是相关的位(和有益的是在最顶部!):
我在问题中忽略了这一点,没有意识到它们是相关的,但是varchar列都有
ascii_bin
排序规则。所有这些,也就是说,* 除了 *entity_role
上的entity_type
列,它根本没有设置(我假设这意味着使用表默认值)!修改列以使用匹配的排序规则解决了问题。