【问题标题】:MySQL errno: 150 can't create tableMySQL errno: 150 无法创建表
【发布时间】:2012-03-17 12:52:39
【问题描述】:

我知道关于这个错误有很多关于 SO 的问题,但即使应用我从中收集到的内容,我仍然得到“无法创建表 (errno: 150)”

CREATE TABLE sch_results
(
id INT NOT NULL AUTO_INCREMENT,
s_id INT UNSIGNED NOT NULL,
r_eid VARCHAR(10) NOT NULL,
cohorts INT,
allstudents INT,
comments TEXT,
PRIMARY KEY (id),
FOREIGN KEY (s_id) REFERENCES scholarships (id),
FOREIGN KEY (r_eid) REFERENCES sch_recommenders (eid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我检查了外键是否都以该名称存储在各自的表中。
我检查了它们各自的数据类型是否与此查询匹配。 我检查了两个现有表使用 InnoDB 和 utf8。
我在外键中添加了 UNSIGNED NOT NULL。
我在他们的表中索引了两个外键。 最初,我使用的是 s_id 和 r_id,但听说这可能会导致一些问题。 r_eid 也是独一无二的,所以我切换到那个。它不是主键。

我错过了什么?

【问题讨论】:

  • 所有列都有相同的定义?奖学金和 sch_recommenders 是什么样的?
  • 奖学金 id:INT 长度 3 sch_recommenders eid:VARCHAR 长度 10
  • 你能同时显示奖学金和 sch_recommenders 表结构吗?
  • 感谢您促使我进一步推动。我创建了没有外键约束的表。当我添加它们时,我得到了一个关于数据类型的特定错误。原来排序规则设置为 utf8-unicode-ci 而不是 utf8-general-ci。修复了它,现在可以使用了。
  • @user1236114 您可能会考虑“回答您自己的问题”并标记答案,这样以后来的任何人都不必通过 cmets 来找出问题

标签: mysql sql foreign-keys mysql-error-1005


【解决方案1】:

对于这个错误的所有基本原因,这里有一个详尽的资源,说明导致 MySQL 中的 errno 150(和 errno 121/其他外键错误)的原因。

MySQL Foreign Key Errors and Errno 150

【讨论】:

    【解决方案2】:

    问题是源字段和目标字段在各个方面都需要相同。例如,如果源字段“无符号”关闭,而目标“无符号”打开,则会出现此错误。

    【讨论】:

      【解决方案3】:

      原来排序规则设置为 utf8-unicode-ci 而不是 utf8-general-ci。已修复,现在可以使用了。

      【讨论】:

        猜你喜欢
        • 2014-04-05
        • 2010-12-17
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-20
        • 2013-07-22
        • 2013-12-30
        相关资源
        最近更新 更多