Hinzufügen eines Fremdschlüssels vom Typ char in mysql
Ich habe ein Problem beim Hinzufügen eines Fremdschlüssels in MySQL (mit phpmyadmin).
ALTER TABLE `production_x_country` ADD FOREIGN KEY (`country`) REFERENCES `pmdb_0.3.12`.`countries`(`iso_3166_1`) ON DELETE CASCADE ON UPDATE CASCADE;
# 1215 - Fremdschlüsselbedingung kann nicht hinzugefügt werden
asierend auf einigen Recherchen und Tests bin ich zu dem Schluss gekommen, dassCHAR
(Dasproduction_x_country
.country
Feld)ist kein gültiger Fremdschlüsselfeldtyp - obwohl ich keinen Hinweis auf diese Annahme in den MySQL-Dokumenten gefunden habe. Wenn ich den Spaltentyp in einen anderen Zeichentyp wie @ ändeVARCHAR
funktioniert die Prozedur.
eine ähnliche Frage wurde hier "gelöst", aber die verknüpfte Antwort ging es nicht um das Typproblem aber darüber, dass ein Ländercode ein Primärschlüssel ist (was für mich vollkommen sinnvoll ist):https: //stackoverflow.com/a/1419235/430273
Tabellenbeschreibungen:
CREATE TABLE IF NOT EXISTS `countries` (
`iso_3166_1` char(3) NOT NULL, <----- primary key to be referenced to
`name` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `countries` ADD PRIMARY KEY (`iso_3166_1`);
CREATE TABLE IF NOT EXISTS `production_x_country` (
`production` int(11) NOT NULL,
`country` char(3) CHARACTER SET utf8 NOT NULL <----- column that should hold the foreign key
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Gibt es eine Lösung (ja, ich könnte weiterhin varchar verwenden, aber das ist für mich nicht zufriedenstellend)? und am wichtigsten: gibt es eine Erklärung?
Danke für deine Hilfe
gelöst - siehe meine eigene Antwort unten