3

我知道关于这个错误有很多关于 SO 的问题,但即使应用我从中收集到的内容,我仍然得到“无法创建表(错误号: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 也是独一无二的,所以我切换到那个。它不是主键。

我错过了什么?

4

3 回答 3

3

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

MySQL 外键错误和 Errno 150

于 2012-06-13T00:51:37.880 回答
1

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

于 2012-09-29T00:40:52.657 回答
0

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

于 2013-05-30T16:48:08.500 回答