title: MySQL: Creating table with FK error (errno 150)
body: <p>I've created a model with <a href="http://dev.mysql.com/workbench/" rel="noreferrer">MySQL Workbench</a> and am now attempting to install it to a mysql server.</p>
  
  <p>Using <strong>File > Export > Forward Engineer SQL CREATE Script...</strong> it outputs a nice big file for me, with all the settings I ask for.  I switch over to <a href="http://dev.mysql.com/downloads/gui-tools/5.0.html" rel="noreferrer">MySQL GUI Tools</a> (the Query Browser specifically) and load up this script (note that I'm going form one official MySQL tool to another).  However, when I try to actually execute this file, I get the same error over and over </p>
  
  <blockquote>
    <p>SQLSTATE[HY000]: General error: 1005
    Can't create table
    './srs_dev/location.frm' (errno: 150)</p>
  </blockquote>
  
  <p>"OK", I say to myself, something is wrong with the location table.  So I check out the definition in the output file.</p>
  
  <pre><code>SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
  
  -- -----------------------------------------------------
  -- Table `state`
  -- -----------------------------------------------------
  DROP TABLE IF EXISTS `state` ;
  
  CREATE  TABLE IF NOT EXISTS `state` (
    `state_id` INT NOT NULL AUTO_INCREMENT ,
    `iso_3166_2_code` VARCHAR(2) NOT NULL ,
    `name` VARCHAR(60) NOT NULL ,
    PRIMARY KEY (`state_id`) )
  ENGINE = InnoDB;
  
  -- -----------------------------------------------------
  -- Table `brand`
  -- -----------------------------------------------------
  DROP TABLE IF EXISTS `brand` ;
  
  CREATE  TABLE IF NOT EXISTS `brand` (
    `brand_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(45) NOT NULL ,
    `domain` VARCHAR(45) NOT NULL ,
    `manager_name` VARCHAR(100) NULL ,
    `manager_email` VARCHAR(255) NULL ,
    PRIMARY KEY (`brand_id`) )
  ENGINE = InnoDB;
  
  -- -----------------------------------------------------
  -- Table `location`
  -- -----------------------------------------------------
  DROP TABLE IF EXISTS `location` ;
  
  CREATE  TABLE IF NOT EXISTS `location` (
    `location_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(255) NOT NULL ,
    `address_line_1` VARCHAR(255) NULL ,
    `address_line_2` VARCHAR(255) NULL ,
    `city` VARCHAR(100) NULL ,
    `state_id` TINYINT UNSIGNED NULL DEFAULT NULL ,
    `postal_code` VARCHAR(10) NULL ,
    `phone_number` VARCHAR(20) NULL ,
    `fax_number` VARCHAR(20) NULL ,
    `lat` DECIMAL(9,6) NOT NULL ,
    `lng` DECIMAL(9,6) NOT NULL ,
    `contact_url` VARCHAR(255) NULL ,
    `brand_id` TINYINT UNSIGNED NOT NULL ,
    `summer_hours` VARCHAR(255) NULL ,
    `winter_hours` VARCHAR(255) NULL ,
    `after_hours_emergency` VARCHAR(255) NULL ,
    `image_file_name` VARCHAR(100) NULL ,
    `manager_name` VARCHAR(100) NULL ,
    `manager_email` VARCHAR(255) NULL ,
    `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    PRIMARY KEY (`location_id`) ,
    CONSTRAINT `fk_location_state`
      FOREIGN KEY (`state_id` )
      REFERENCES `state` (`state_id` )
      ON DELETE NO ACTION
      ON UPDATE NO ACTION,
    CONSTRAINT `fk_location_brand`
      FOREIGN KEY (`brand_id` )
      REFERENCES `brand` (`brand_id` )
      ON DELETE NO ACTION
      ON UPDATE NO ACTION)
  ENGINE = InnoDB;
  
  CREATE INDEX `fk_location_state` ON `location` (`state_id` ASC) ;
  
  CREATE INDEX `fk_location_brand` ON `location` (`brand_id` ASC) ;
  
  CREATE INDEX `idx_lat` ON `location` (`lat` ASC) ;
  
  CREATE INDEX `idx_lng` ON `location` (`lng` ASC) ;
  </code></pre>
  
  <p>Looks ok to me.  I surmise that maybe something is wrong with the Query Browser, so I put this file on the server and try to load it this way</p>
  
  <pre><code>] mysql -u admin -p -D dbname &lt; path/to/create_file.sql
  </code></pre>
  
  <p>And I get the same error.  So I start to Google this issue and find all kinds of accounts that talk about an error with InnoDB style tables that fail with foreign keys, and the fix is to add "SET FOREIGN_KEY_CHECKS=0;" to the SQL script.  Well, as you can see, that's already part of the file that MySQL Workbench spat out.</p>
  
  <p>So, my question is then, why is this not working when I'm doing what I think I'm supposed to be doing?</p>
  
  <p>Version Info:</p>
  
  <ul>
  <li><h1>MySQL: 5.0.45</h1></li>
  <li>GUI Tools: 1.2.17</li>
  <li>Workbench: 5.0.30</li>
  </ul>