O tipo do campo em uma chave estrangeira deve ser igual ao tipo da coluna que está referenciando. Você tem o seguinte (recorte):
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 ,
então você está tentando se referir a
INT
campos (nas tabelas state
e brand
) com TINYINT
campos na tabela location
. Acho que é esse o erro que está reclamando. Não tenho certeza de como surgiu em primeiro lugar, ou por que zerar FOREIGN_KEY_CHECKS
não impede o MySQL de diagnosticar o erro, mas o que acontece se você corrigir essa incompatibilidade de tipo?