Typ pole v cizím klíči musí být stejný jako typ sloupce, na který odkazuje. Máte následující (výstřižky):
CREATE TABLE IF NOT EXISTS `state` (
`state_id` INT NOT NULL AUTO_INCREMENT ,
...
CREATE TABLE IF NOT EXISTS `brand` (
`brand_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
...
CREATE TABLE IF NOT EXISTS `location` (
...
`state_id` TINYINT UNSIGNED NULL DEFAULT NULL ,
...
`brand_id` TINYINT UNSIGNED NOT NULL ,
takže se pokoušíte odkazovat na INT
pole (v tabulkách state
a brand
) pomocí TINYINT
pole v tabulce location
. Myslím, že to je ta chyba, na kterou si stěžuje. Nejste si jisti, jak k tomu došlo, nebo proč vynulování FOREIGN_KEY_CHECKS
nezabrání MySQL v diagnostice chyby, ale co se stane, když tento nesoulad typu opravíte?