MySQL errno: 150 не может создать таблицу - PullRequest
3 голосов
/ 28 февраля 2012

Я знаю, что на 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 также уникален, поэтому я переключился на это.Это не первичный ключ.

Чего мне не хватает?Спасибо!

ИЗУЧЕННЫЙ УРОК: Тщательно проверьте все аспекты ваших типов данных!

Ответы [ 3 ]

3 голосов
/ 13 июня 2012

По существу для всех причин этой ошибки, вот исчерпывающий ресурс для того, что вызывает ошибки errno 150 (и errno 121 / другие ошибки внешнего ключа) в MySQL.

Ошибки внешнего ключа MySQL и Errno150

1 голос
/ 29 сентября 2012

Проблема в том, что поля источника и цели должны быть одинаковыми во всех аспектах. Например, если для поля источника отключено «unsigned», а для целевого объекта включено «unsigned», вы получите эту ошибку.

0 голосов
/ 30 мая 2013

Оказывается, что для параметров сортировки было установлено utf8-unicode-ci вместо utf8-general-ci.Исправил и теперь работает.

...