Невозможно создать внешний ключ с одинаковыми нулевыми varchars [duplicate]

Привет, я видел этот заголовок тысячи раз здесь, но все же я не мог найти ответ, соответствующий этому. Извините, если я просто незнаю или так.

Давайте получим две таблицы:

CREATE TABLE `TableA` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `string_key` (`string_key`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


CREATE TABLE `TableB` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `referring_string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `referring_string_key` (`referring_string_key`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Создание FK не выполняется. Невозможно добавить ограничение внешнего ключа . (ничего больше)

ALTER TABLE `TableB`
ADD FOREIGN KEY (`referring_string_key`) REFERENCES `TableA` (`string_key`) ON DELETE SET NULL ON UPDATE CASCADE;

Что ж ..

  • Обе таблицы - innoDb с одинаковой сортировкой
  • Оба столбца имеют одинаковый тип данных ( varchar(256) default null)
  • Оба столбца имеют одинаковую сортировку
  • Индексы, установленные с обеих сторон (не работают, даже если индекс TableA.string_key не уникален)
  • Не работает даже при настройке любой комбинации событий обновления / удаления
  • Таблицы пусты.

Что мне не хватает? Или просто невозможно создать FK между двумя переменными с нулевым значением varchars?

Благодарю вас в andvace.

mysql,foreign-keys,innodb,mysql,

0

Ответов: 1


0

Опечатка?

UNIQUE KEY `string_key` (`string_key`(255))

должно быть

UNIQUE KEY (`string_key`)

Кроме того , тип данных должен быть один и тот же, включая длину, которая на самом деле так, просто упомянув это в случае , если вы на самом деле хотели VARCHAR(255).

MySQL, иностранные клавиши, InnoDB, MySQL,
Похожие вопросы
Яндекс.Метрика