Adicionando chave estrangeira do tipo char no mysql
Eu tenho um problema ao adicionar uma chave estrangeira no mysql (usando 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 - Não é possível adicionar restrição de chave estrangeira
com base em algumas pesquisas e testes, cheguei à conclusão de queCHAR
(esteproduction_x_country
.country
campo)não é um tipo de campo de chave estrangeira válido - embora eu não tenha encontrado nenhuma dica para essa suposição nos documentos do mysql. se eu mudar o tipo de coluna para algum outro tipo de caractere comoVARCHAR
, o procedimento funciona.
uma pergunta semelhante foi "resolvida" aqui, mas essa resposta vinculadanão era sobre o problema de tipo mas sobre um código de país ser uma chave primária (o que faz todo sentido para mim):https://stackoverflow.com/a/1419235/4302731
descrições da tabela:
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;
existe alguma solução (sim, eu poderia continuar usando o varchar, mas isso não é satisfatório para mim)? e mais importante:existe alguma explicação?
obrigado pela ajuda!
resolvido - veja minha própria resposta abaixo