2016-10-15 13 views
0

こんにちは この見出しはここで何千回も見ましたが、これに対応する回答は見つかりませんでした。私がちょうど無知なのであれば申し訳ありません。nullable varcharsと同じ外字キーを作成できません

は、の2つのテーブルを持ってみましょう:FKはで失敗作成

CREATE TABLE `TableA` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `string_key` (`string_key`(255)) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 


CREATE TABLE `TableB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `referring_string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `referring_string_key` (`referring_string_key`(255)) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

は、外部キー制約を追加することはできません。 (何もない)

ALTER TABLE `TableB` 
ADD FOREIGN KEY (`referring_string_key`) REFERENCES `TableA` (`string_key`) ON DELETE SET NULL ON UPDATE CASCADE; 

まあ..

  • 両方のテーブルが同じ照合順序で
  • 両方のカラムは、どちらの列が同じ照合順序に
  • インデックスを持つ同じデータ型(varchar(256) default null
  • のInnoDBをされています両側に設定する(TableA.string_keyインデックスが一意でない場合でも機能しない)
  • イブn更新/削除イベントの組み合わせを設定する場合はn
  • テーブルは空です。

何が欠けていますか?または、2つのnullable varcharsの間にFKを作成することはできません。

ありがとう、andvace。

+1

255と照合すると255と照合されます。 – Drew

+0

UNIQUE(str(...))は常に間違いです。一意性のために接頭辞_のみをチェックします。 –

答えて

0

Typo?

UNIQUE KEY `string_key` (`string_key`(255)) 

は、

UNIQUE KEY (`string_key`) 

はまた、データ型が実際にそうである同じ、などの長さ、である必要があることちょうどあなたが実際にVARCHAR(255)を望んでいた場合にはこれを言及すべきです。

関連する問題