2011-12-22 59 views
0

I次の2つの表があります。MySQLがテーブルを作成することはできません(エラー番号:150)

alter table `factorydb`.`table2` add constraint `FK_table2` FOREIGN KEY (`TABLE1_CODE`) REFERENCES `table1` (`CODE`) 

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 

とは、私はとの参照を作成しようとしています

エラーが発生します:

Can't create table 'factorydb.#sql-70c_306' (errno: 150) 

アイデアは私が

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

としてTABLE1にいくつかの値を持つことになりますように、私のテーブルの言語エントリに対処するためであると私は用としてTABLE1にCODEへの参照を作りたいです私は両方のCARCODE値が有効で、言語設定によってのみ有効です。

私は間違っていますか?

すべてのご協力をいただきありがとうございます。

答えて

1

外部キーの両方の列は、同じ型、長さおよび照合でなければなりません。

ところで、あなたは本当に代わりのvarcharの整数で外部キーを設定することを好むしたい、それははるかに高速参加だと少ないスペースを取る

1

問題は、2つのリンクの列が同じタイプではないということです。

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

TABLE1_CODE varchar(30) COLLATE utf8_bin NOT NULL 
のようなあなたのFK列を変更

関連する問題