Error en mysql Can’t create table ‘???’ (errno: 150)

Preguntas RecientesCategoria: MySQLError en mysql Can’t create table ‘???’ (errno: 150)
snow Staff preguntada 1 año antes

tengo dos tablas en mi base de datos

CREATE TABLE IF NOT EXISTS `consultas` (
`id` INT (5) PRIMARY KEY NOT NULL UNIQUE AUTO_INCREMENT,
`user_id` INT (6) NOT NULL,
`proyecto_id` VARCHAR (15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

y proyectos


CREATE TABLE IF NOT EXISTS `proyectos` (
`id` VARCHAR( 15 ) PRIMARY KEY NOT NULL UNIQUE,
`empresa_id` INT ( 4 ) DEFAULT NULL,
`estado_id` INT( 2 ) DEFAULT NULL,
`descripcion` VARCHAR( 150 ) DEFAULT NULL,
`estado_pendiente` BOOLEAN DEFAULT TRUE DEFAULT NULL COMMENT "estado",
`created` DATETIME DEFAULT NULL,
`user_supervisor_id` INT( 4 ) DEFAULT NULL COMMENT "usuario_registro usuario supervisor",
`fecha_de_compra` DATE DEFAULT NULL,
`num_estufas` INT( 3 ) DEFAULT 0 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

y quiero agregar un cosntraint que relacione la tabla consultas en su campo proyecto_id con la tabla proyectos pero al agregar el constraint


ALTER TABLE consultas
ADD CONSTRAINT consultas_proyectos
FOREIGN KEY (proyecto_id)
REFERENCES proyectos(id)
ON DELETE CASCADE
ON UPDATE CASCADE;

me bota el error  Can’t create table  (errno: 150), despues de buscar un poco, en internet comentan que el error tal vez se deba a que el campo al que apunta el constreint no esta indexado, o que los campos relacionados no son iguales (del mismo tipo y longitud), o que posiblemente el charset de las tablas son diferentes (uno es latin1 y otro es utf8), y por ultimo encontre que puede que las tablas sean de tipos diferentes (una es InnoDB y otra MyISAM). Pero ya cheque todos estos detalles y no es el caso de mis tablas, todo esta bien y aun asi no puedo crear el cosntraint

1 Respuestas
edwin contestada 1 año antes

te falta checar el tipo de colación de la tabla (sin albur), es diferente el charset y collation, puedes ver que tipo de collation tiene tu tabla con

show table status where name = 'consultas';

y la de proyectos

show table status where name = 'proyectos';

si en su campo collation es diferente lo puedes cambiar con

 alter table tu_tabla convert to character set tu_charset collate tu_collation; 

y cambias tu_charset  y  tu_collation por los valores correspondientes para que queden igaules como por ejemplo:

alter table consultas convert to character set latin1 collate latin1_swedish_ci; 

Your Answer

1 + 5 =