MySQL. Продолжайте получать ограничение внешнего ключа - неправильно сформированная ошибка - PullRequest
0 голосов
/ 14 мая 2018

Мне нужна помощь в понимании, почему я продолжаю получать эту ошибку

Error Code: 1005. Can't create table `test`.`#sql-2394_1043` (errno: 150 "Foreign key constraint is incorrectly formed")

при попытке создать внешний ключ между следующими таблицами.

CREATE TABLE `componenti_crafting` (
  `id_componente` varchar(255) CHARACTER SET utf8 NOT NULL,
  `nome_componente` varchar(255) CHARACTER SET utf8 NOT NULL,
  `tipo_crafting_componente` set('tecnico','programmazione','chimico') CHARACTER SET utf8 NOT NULL,
  `tipo_componente` set('parametro_x','parametro_y','parametro_z','struttura','batteria','applicativo','supporto','cerotto','fiala','solido','sostanza') CHARACTER SET utf8 NOT NULL,
  `costo_attuale_componente` int(255) DEFAULT NULL,
  `costo_vecchio_componente` int(255) DEFAULT NULL,
  `fcc_componente` int(11) DEFAULT NULL,
  `valore_param_componente` int(11) DEFAULT NULL,
  `volume_componente` int(11) DEFAULT NULL,
  `energia_componente` int(11) DEFAULT NULL,
  `fattore_legame_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `curativo_primario_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `psicotropo_primario_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `tossico_primario_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `curativo_secondario_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `psicotropo_secondario_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `tossico_secondario_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `possibilita_dipendeza_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `effetto_sicuro_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `descrizione_componente` text CHARACTER SET utf8,
  `tipo_applicativo_componente` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id_componente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-

CREATE TABLE `componenti_acquistati` (
  `id_acquisto` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_acquisto` int(11) NOT NULL,
  `id_componente_acquisto` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `importo_acquisto` int(11) NOT NULL,
  `data_acquisto` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_acquisto`),
  KEY `fk_acquirente_idx` (`cliente_acquisto`),
  KEY `fk_comp_acq_idx` (`id_componente_acquisto`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

С помощью этой команды:

ALTER TABLE `componenti_acquistati`
  ADD CONSTRAINT `fk_comp_acq`
FOREIGN KEY (`id_componente_acquisto`)
REFERENCES `componenti_crafting` (`id_componente`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;

Я проверил тип поля, параметры сортировки и флаги (не null, unsigned ... и т. Д.), Но все между двумя полями, кажется, совпадает. Чего мне не хватает?

Заранее спасибо!

1 Ответ

0 голосов
/ 14 мая 2018

ошибка вызвана разной настройкой параметров сортировки для ссылочных и ссылочных столбцов.Согласно руководству по MySQL, параметры сортировки должны быть одинаковыми, см. https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

. Для проверки используемых типов используйте

show create table componenti_acquistati;
show create table componenti_crafting ;

. Чтобы изменить тип параметров сортировки в ссылочной таблице,используйте

ALTER TABLE `componenti_acquistati`
    CHANGE COLUMN `id_componente_acquisto` `id_componente_acquisto` VARCHAR(255) NOT NULL COLLATE 'utf8_general_ci' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...