Типът на полето във външния ключ трябва да е същият като типа на колоната, която препращат. Имате следното (изрязване):
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 ,
така че се опитвате да се позовавате на INT полета (в таблици state и brand ) с TINYINT полета в таблица location . Мисля, че това е грешката, от която се оплаква. Не съм сигурен как се появи на първо място или защо се нулира FOREIGN_KEY_CHECKS не спира MySQL да диагностицира грешката, но какво ще стане, ако коригирате това несъответствие на типа?