Il tipo del campo in una chiave esterna deve essere uguale al tipo della colonna a cui fanno riferimento. Hai quanto segue (snipping):
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 ,
quindi stai cercando di fare riferimento a INT
campi (nelle tabelle state
e brand
) con TINYINT
campi nella tabella location
. Penso che questo sia l'errore di cui si lamenta. Non sono sicuro di come sia venuto fuori in primo luogo, o perché azzerare FOREIGN_KEY_CHECKS
non impedisce a MySQL di diagnosticare l'errore, ma cosa succede se risolvi questo tipo di mancata corrispondenza?