我无法在mysql错误150中创建外键。请帮助

问题描述:

我想在我的表中创建一个外键。但是,当我执行我的查询它让我错误150我无法在mysql错误150中创建外键。请帮助

Error Code : 1025 
Error on create foreign key of '.\vts\#sql-6ec_1' to '.\vts\tblguardian' (errno: 150) 
(0 ms taken) 

我的查询是

查询来创建一个外键

alter table `vts`.`tblguardian` add constraint `FK_tblguardian` FOREIGN KEY (`GuardianPickPointId`) REFERENCES `tblpickpoint` (`PickPointId`) 

主键表

CREATE TABLE `tblpickpoint` (               
       `PickPointId` int(4) NOT NULL auto_increment,           
       `PickPointName` varchar(500) default NULL,            
       `PickPointLabel` varchar(500) default NULL,           
       `PickPointLatLong` varchar(100) NOT NULL,            
       PRIMARY KEY (`PickPointId`)               
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC 

外交密钥表

CREATE TABLE `tblguardian` (       
       `GuardianId` int(4) NOT NULL auto_increment,   
       `GuardianName` varchar(500) default NULL,    
       `GuardianAddress` varchar(500) default NULL,   
       `GuardianMobilePrimary` varchar(15) NOT NULL,   
       `GuardianMobileSecondary` varchar(15) default NULL, 
       `GuardianPickPointId` int(4) default NULL,  
       PRIMARY KEY (`GuardianId`)       
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1  
+0

@Shantanu Gupta:你应该创造一个新的问题,而不是改变你的旧问题。在你的新问题中,如果它提供有用的背景信息,请链接回原来的问题。当您将问题更改为另一个问题时,现有答案不再有意义,因此对于通过Google查找此网站的同一问题的其他人无效。 – 2010-04-05 08:03:10

你的问题是在你的约束列的类型是不同的。他们必须是一样的。

`PickPointId` int(4) NOT NULL auto_increment, 

`GuardianPickPointId` varchar(100) default NULL, 

欲了解更多信息,请参阅the documentation

相应列的外键,以便他们可以在没有类型转换比较的参考密钥必须有InnoDB内类似的内部数据类型。整数类型的大小和符号必须相同。字符串类型的长度不需要相同。对于非二进制(字符)字符串列,字符集和归类必须相同。