繁体   English   中英

MySQL无法创建表(错误号:150)

[英]MySQL Can't create table (errno: 150)

我有以下两个表:

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值都是有效的,只取决于语言设置。

我做错了吗?

所有帮助表示赞赏。

外键中的两列必须是相同的类型,长度和排序规则。

顺便说一下,你真的希望在整数而不是varchars上设置外键,加入速度要快得多,占用空间更少

问题是两个链接列的类型不同:

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 !

您需要确保定义完全相同

像你这样更改你的FK列

TABLE1_CODE varchar(30) COLLATE utf8_bin NOT NULL 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM