2011-12-22 72 views
0

我有以下兩個表:MySQL不能創建表(錯誤: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) 

這樣做是爲了應對我的表語言的條目,所以,我將在表1有一定的值

ID | CODE | LANG | NAME 
1 CARCODE EN Car 
2 CARCODE DE Auto 

而且我想在表1作爲對代碼的引用我兩個CARCODE值都是有效的,只取決於語言設置。

我做錯了嗎?

所有幫助表示讚賞。

回答

1

外鍵中的兩列必須是相同的類型,長度和排序規則。

順便說一句,你真的想更喜歡整數,而不是VARCHAR處理設置一個外鍵,它的速度更快的連接和佔用較少的空間

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 ! 

您需要確定的定義是,確切地說是一樣的。

0

更改您的FK列像

TABLE1_CODE varchar(30) COLLATE utf8_bin NOT NULL 
相關問題