如何解决FK约束格式错误
每当我尝试将此sql文件导入到本地主机时,都会收到以下错误消息
(#1005-无法创建表
hostel_management_system
。Hostel_Manager
(错误号:150“外键约束格式不正确”))
这是sql:
DROP TABLE IF EXISTS `Hostel_Manager`;
CREATE TABLE `Hostel_Manager` (
`Hostel_man_id` int(10) NOT NULL AUTO_INCREMENT,`Username` varchar(255) NOT NULL,`Fname` varchar(255) NOT NULL,`Lname` varchar(255) NOT NULL,`Mob_no` varchar(255) NOT NULL,`Hostel_id` int(10) NOT NULL,`Pwd` LONGTEXT NOT NULL,`Isadmin` tinyint(1) DEFAULT '0',PRIMARY KEY (`Hostel_man_id`),UNIQUE (`Username`),KEY `Hostel_id` (`Hostel_id`),CONSTRAINT `Hostel_Manager_ibfk_1` FOREIGN KEY (`Hostel_id`) REFERENCES `Hostel` (`Hostel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `Hostel_Manager` WRITE;
UNLOCK TABLES;
旅馆桌:
CREATE TABLE `Hostel` (
`Hostel_id` int(10) NOT NULL AUTO_INCREMENT,`Hostel_name` varchar(255) NOT NULL,`current_no_of_rooms` varchar(255) DEFAULT NULL,`No_of_rooms` varchar(255) DEFAULT NULL,`No_of_students` varchar(255) DEFAULT NULL,PRIMARY KEY (`Hostel_id`)
)
为什么会出现该错误以及如何解决?
解决方法
parent和child列都具有相同的数据类型和长度,并且parent列是主列,因此这不是问题。
我怀疑问题出在charset
。 Hostel_Manager
指定默认的charset
,而Hostel
未指定。如果您数据库的默认字符集不是latin1
之外的其他字符集,则外部变量格式错误。
我建议显式对齐charset
,以使两个表都相同(要么删除两个表,要么声明相同的值)。
请注意,两个表还需要具有相同的存储引擎。 InnoDB
是默认值,因此这不成问题,但是您可能还想明确对齐(如果数据库的默认值为MyISAM
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。