2017-10-31 17 views
0

MySQLデータベースのテーブルに外部キー制約を追加する際に問題があります。外部キーの作成

私は、次のユーザーテーブルがあります。

CREATE TABLE `user` (
    `Id` varchar(128) NOT NULL, 
    `Email` varchar(255) NOT NULL, 
    `EmailConfirmed` tinyint(1) NOT NULL, 
    `PasswordHash` longtext, 
    `SecurityStamp` longtext, 
    `PhoneNumber` longtext, 
    `PhoneNumberConfirmed` tinyint(1) NOT NULL, 
    `TwoFactorEnabled` tinyint(1) NOT NULL, 
    `LockoutEndDateUtc` datetime DEFAULT NULL, 
    `LockoutEnabled` tinyint(1) NOT NULL, 
    `AccessFailedCount` int(11) NOT NULL, 
    `UserName` varchar(255) NOT NULL, 
    PRIMARY KEY (`Id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

をそして、これは私は外部キーを追加しようとしている私のusernoticeテーブルです:

CREATE TABLE `usernotice` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `notifySitemap` bit(1) NOT NULL, 
    `notifyRobots` bit(1) NOT NULL, 
    `user_id` varchar(128) DEFAULT NULL, 
    `health_site_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_constraint_idx` (`user_id`), 
    KEY `healthSiteId_idx` (`health_site_id`), 
    CONSTRAINT `healthSiteId` FOREIGN KEY (`health_site_id`) REFERENCES `health_site` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

私が参照しようとしていますusernotice.user_id列のuser.id列。これを行うには、次のSQLを使用しています。

ALTER TABLE usernotice 
ADD CONSTRAINT userId 
    FOREIGN KEY (user_id) 
    REFERENCES user (Id) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION; 

これを実行すると、1215コードでエラーが発生します。誰かが私が間違っていることを教えてもらえますか?

編集:show create tableクエリーを調べた後、私は使用された文字セットの違いに気付きました。 usernoticeテーブルを別の文字セットで再作成し、これを修正しました。

+0

'user.id'はプライマリキーですか? 1215のコードは何を意味しますか? – jarlh

+0

はい、 'user.id'は主キーです。エラー:1215 SQLSTATE:HY000(ER_CANNOT_ADD_FOREIGN) メッセージ:外部キー制約を追加できません。 –

+0

この場合、 'usernotice'テーブルは空でなければなりません。 – Noman

答えて

0

https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html外部キーと参照キーの対応する列には、同様のデータ型が必要です。整数型のサイズと符号は同じでなければなりません。文字列型の長さは同じである必要はありません。非バイナリ(文字)文字列の場合、文字セットと照合は同じでなければなりません。

あなたのキャラクタセットは同じではありません...

関連する問題