我有以下两个表:
CREATE TABLE `table1` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CODE` varchar(30) COLLATE utf8_bin NOT NULL,
`LANG` varbinary(30) NOT NULL,
`NAME` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`ID`),
KEY `NewIndex1` (`CODE`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
和
CREATE TABLE `table2` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`TABLE1_CODE` varchar(30) NOT NULL,
`SOME_ADD` varchar(30) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
我试图用以下方法作出参考:
alter table `factorydb`.`table2` add constraint `FK_table2` FOREIGN KEY (`TABLE1_CODE`) REFERENCES `table1` (`CODE`)
我收到错误:
Can't create table 'factorydb.#sql-70c_306' (errno: 150)
我的想法是处理表格中的语言条目,以便我在 table1 中有一些值为
ID | CODE | LANG | NAME
1 CARCODE EN Car
2 CARCODE DE Auto
我想在 table1 中引用CODE,对我来说两个CARCODE值都有效,只取决于语言设置。
我做错了吗?
感谢所有帮助。
答案 0 :(得分:1)
外键中的两列必须是相同的类型,长度和排序规则。
顺便说一句,你真的希望在整数上设置外键而不是varchars,加入速度要快得多,占用的空间更少
答案 1 :(得分:1)
问题是两个链接列的类型不同:
Table1
---------
`CODE` varchar(30) COLLATE utf8_bin NOT NULL,
Table2
---------
`SOME_ADD` varchar(30) DEFAULT NULL,
//This column does not have the utf8_bin collation !
您需要确保定义完全相同。
答案 2 :(得分:0)
更改您的FK列,如
TABLE1_CODE varchar(30) COLLATE utf8_bin NOT NULL