MySQL,外键,无法创建表错误 150

Ben*_*Ben 7 mysql foreign-key

更新:抱歉,这是因为我忘记将 UNSIGNED 属性添加到 lang_id 列。

原文:我正在尝试在 MySQL 中创建一个带有外键的表。

我收到此错误:#1005 - 无法创建表 'xy.trans' (errno: 150)

以下创建语句有什么问题吗?

CREATE  TABLE IF NOT EXISTS `lang` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `code` CHAR(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB;


CREATE  TABLE IF NOT EXISTS `trans` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `something` TEXT NOT NULL,
  `lang_id` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `index_trans_lang` (`lang_id` ASC),
  CONSTRAINT `fk_trans_lang`
    FOREIGN KEY (`lang_id` )
    REFERENCES `lang` (`id` )
    ON DELETE SET NULL
    ON UPDATE CASCADE
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

Dav*_*Rix 2

我遇到了类似的问题,我最终通过检查所引用的两个字段的字段类型来解决它 - 它们必须是完全相同的类型- 一直到“Not NUll”和“未签名”设置...

在您原来的帖子中,“lang”表的“id”字段定义为“INT UNSIGNED NOT NULL”,而“trans”表的“lang_id”字段定义为“INT NULL”...