Agregar clave foránea de tipo char en mysql
Tengo un problema al agregar una clave externa en 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 - No se puede agregar la restricción de clave externa
basado en algunas investigaciones y pruebas, he llegado a la conclusión de queCHAR
(eseproduction_x_country
.country
campo)no es un tipo de campo de clave externa válido - aunque no encontré ninguna pista sobre esa suposición en los documentos de mysql. si cambio el tipo de columna a otro tipo de caracteres comoVARCHAR
, el procedimiento funciona.
una pregunta similar fue "resuelta" aquí, pero esa respuesta vinculadano se trataba del problema de tipo pero sobre un código de país como clave principal (lo que tiene mucho sentido para mí):https://stackoverflow.com/a/1419235/4302731
descripciones de la tabla:
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;
¿hay alguna solución (sí, podría seguir usando varchar, pero eso no me satisface)? y lo más importante:hay alguna explicación?
¡Gracias por tu ayuda!
resuelto - mira mi propia respuesta a continuación