Добавление внешнего ключа типа char в mysql
У меня проблема с добавлением внешнего ключа в MySQL (с помощью 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 - Невозможно добавить ограничение внешнего ключа
основываясь на некоторых исследованиях и тестах, я пришел к выводу, чтоCHAR
(тотproduction_x_country
.country
поле)недопустимый тип поля внешнего ключа - хотя я не нашел никакого намека на это предположение в документации MySQL. если я изменю тип столбца на другой тип символа, напримерVARCHAR
, процедура работает.
подобный вопрос был «решен» здесь, но этот связанный ответне о типовой проблеме но о коде страны, являющейся первичным ключом (что имеет смысл для меня):https://stackoverflow.com/a/1419235/4302731
описания таблиц:
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;
Есть ли какое-либо решение (да, я мог бы продолжать использовать varchar, но это меня не устраивает)? и самое главное:есть ли объяснение?
Спасибо за помощь!
решена - см. мой собственный ответ ниже