2017-07-01 23 views
1

私はactivityとuserという2つのテーブルを持っています。私はこれら2つのテーブルと外来的な関係を作る必要があります。 usernameは私のuserテーブルの主キーです。これはvarchar値です。しかし、私が関係を作ろうとすると、私は外部キーにmysqlエラーコード1215のエラーを制限します。以下は、私が言及した2つのテーブルに関する私のDDLステートメントです。外部キーの関係を追加しようとすると、mysqlの外部キーが制約されます

誰でもこの問題を解決するのに手伝ってください。

おかげ

CREATE TABLE `user` (
    `username` varchar(50) NOT NULL, 
    `user_id` int(11) DEFAULT NULL, 
    `email` varchar(50) DEFAULT NULL, 
    `password` varchar(500) DEFAULT NULL, 
    `activated` tinyint(1) DEFAULT '0', 
    `activationkey` varchar(50) DEFAULT NULL, 
    `resetpasswordkey` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`username`), 
    UNIQUE KEY `user_id_UNIQUE` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE activity (
    activity_id   INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    activity_type_id  INT UNSIGNED, 
    activity_property_id INT UNSIGNED, 
    added_by    varchar(50), 
    updated_by   varchar(50), 
    activity_code  VARCHAR(50), 
    activity_description VARCHAR(100), 
    start_date   TIMESTAMP NULL, 
    end_date    TIMESTAMP NULL, 
    start_time   VARCHAR(10), 
    end_time    VARCHAR(10), 
    added_date   TIMESTAMP NULL, 
    updated_date   TIMESTAMP NULL, 
    is_available   TINYINT(1), 
    PRIMARY KEY (activity_id), 

    CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username), 
    CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username) 
) 
    ENGINE = InnoDB; 
+0

[mcve]を読んで行動してください。 – philipxy

答えて

3

ちょうどDEFAULT CHARSET = latin1のを追加します。以下のクエリを試してみてください。

CREATE TABLE activity (
    activity_id   INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    activity_type_id  INT UNSIGNED, 
    activity_property_id INT UNSIGNED, 
    added_by    VARCHAR(50) DEFAULT NULL, 
    updated_by   VARCHAR(50) DEFAULT NULL, 
    activity_code  VARCHAR(50), 
    activity_description VARCHAR(100), 
    start_date   TIMESTAMP NULL, 
    end_date    TIMESTAMP NULL, 
    start_time   VARCHAR(10), 
    end_time    VARCHAR(10), 
    added_date   TIMESTAMP NULL, 
    updated_date   TIMESTAMP NULL, 
    is_available   TINYINT(1), 
    PRIMARY KEY (activity_id), 
    CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username), 
    CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username) 
) 
    ENGINE = InnoDB DEFAULT CHARSET=latin1; 
1

あなたの間違いは、FK列の種類がPK列の種類と一致しないことです。特に、文字セットが異なります。ドキュメントの外部キーを参照してください。外部キーと参照キーで

13.1.18.6 Using FOREIGN KEY Constraints

  • 対応する列は、類似したデータ型を持っている必要があります。 整数型のサイズと符号は同じでなければなりません。文字列型の長さは同じである必要はありません。非バイナリ(文字)文字列の場合、文字セットと照合は同じでなければなりません。

あなたはまた、InnoDBのテーブルを含む外部キーエラーが発生した場合には、SHOW ERRORSに加えて

がありますので、activityニーズ

ENGINE=InnoDB DEFAULT CHARSET=latin1; 

(通常は150をエラーMySQLサーバ)では、最新のInnoDB外部キーエラーの詳細な説明を得るには、SHOW ENGINE INNODB STATUSの出力をチェックしてください。

関連する問題