Typ pola w kluczu obcym musi być taki sam jak typ kolumny, do której się odwołuje. Masz następujące (wycinanie):
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 ,
więc próbujesz odwołać się do INT
pola (w tabelach state
i brand
) z TINYINT
pola w tabeli location
. Myślę, że to błąd, na który się skarży. Nie wiem, jak to się w ogóle pojawiło, ani dlaczego wyzerowałem FOREIGN_KEY_CHECKS
nie powstrzymuje MySQL przed diagnozowaniem błędu, ale co się stanie, jeśli naprawisz ten niezgodność?