Mysql 错误1822:未能添加外键约束。缺少约束的索引

Mysql 错误1822:未能添加外键约束。缺少约束的索引,mysql,Mysql,我发现了一些关于这个错误的线索。但所有的解决方案都不适合我 我的系统已具有以下表: CREATE TABLE `bdo2_agencia` ( `cod_uf` char(2) NOT NULL, `cod_agencia` char(9) NOT NULL, `nome` varchar(100) NOT NULL, PRIMARY KEY (`cod_uf`,`cod_agencia`), KEY `fk_agencia_2_uf_idx` (`cod_uf`), C

我发现了一些关于这个错误的线索。但所有的解决方案都不适合我

我的系统已具有以下表:

CREATE TABLE `bdo2_agencia` (
  `cod_uf` char(2) NOT NULL,
  `cod_agencia` char(9) NOT NULL,
  `nome` varchar(100) NOT NULL,
  PRIMARY KEY (`cod_uf`,`cod_agencia`),
  KEY `fk_agencia_2_uf_idx` (`cod_uf`),
  CONSTRAINT `fk_agencia_2_uf` FOREIGN KEY (`cod_uf`) REFERENCES `bdo2_uf` (`cod_uf`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `bdo2_login` (
  `login` char(30) NOT NULL,
  `ativo` tinyint(1) DEFAULT '1' COMMENT 'informa se o login está ativo',
  PRIMARY KEY (`login`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我试图在它们之间创建另一个表,定义一个关系N:M

CREATE TABLE IF NOT EXISTS `bdo2`.`bdo2_login_agencia` (
  `cod_uf` CHAR(2) NOT NULL,
  `cod_agencia` CHAR(9) NOT NULL,
  `login` CHAR(30) NOT NULL,
  PRIMARY KEY (`cod_uf`, `cod_agencia`, `login`),
  INDEX `fk_login_2_login_agencia_idx` (`login` ASC),
  INDEX `fk_agencia_2_login_agencia_idx` (`cod_uf` ASC, `cod_agencia` ASC),
  CONSTRAINT `fk_agencia_2_login_agencia`
  FOREIGN KEY (`cod_uf` , `cod_agencia`)
  REFERENCES `bdo2`.`bdo2_agencia` (`cod_uf` , `cod_agencia`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_login_2_login_agencia`
  FOREIGN KEY (`login`) REFERENCES `bdo2`.`bdo2_login` (`login`) ON DELETE NO ACTION ON UPDATE NO ACTION)
ENGINE = InnoDB;
但我收到了以下错误:

Error Code: 1215. Cannot add foreign key constraint
ERROR 1822: Failed to add the foreign key constaint. Missing index for constraint 'fk_agencia_2_login_agencia' in the referenced table 'bdo2_agencia'
用命令

SHOW ENGINE innodb STATUS
我得到了以下信息:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-03-22 10:14:05 7fe09c49f700 Error in foreign key constraint of table bdo2/bdo2_login_agencia:

FOREIGN KEY (`cod_uf` , `cod_agencia`)
REFERENCES `bdo2`.`bdo2_agencia` (`cod_uf` , `cod_agencia`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_login_2_login_agencia`
FOREIGN KEY (`login`) REFERENCES `bdo2`.`bdo2_login` (`login`)
ON DELETE NO ACTION ON UPDATE NO ACTION)
ENGINE = InnoDB:

Cannot find an index in the referenced table where the referenced
columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html
for correct foreign key definition.
因此,我创建了没有约束的表,并尝试单独创建约束

ALTER TABLE `bdo2`.`bdo2_login_agencia` 
ADD INDEX `fk_agencia_2_login_agencia_idx` (`cod_uf` ASC, `cod_agencia` ASC),
ADD INDEX `fk_login_2_login_agencia_idx` (`login` ASC);
ALTER TABLE `bdo2`.`bdo2_login_agencia` 
ADD CONSTRAINT `fk_agencia_2_login_agencia`
FOREIGN KEY (`cod_uf` , `cod_agencia`)
REFERENCES `bdo2`.`bdo2_agencia` (`cod_uf` , `cod_agencia`)
ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_login_2_login_agencia`
FOREIGN KEY (`login`)
REFERENCES `bdo2`.`bdo2_login` (`login`)
ON DELETE NO ACTION ON UPDATE NO ACTION;
但收到以下错误:

Error Code: 1215. Cannot add foreign key constraint
ERROR 1822: Failed to add the foreign key constaint. Missing index for constraint 'fk_agencia_2_login_agencia' in the referenced table 'bdo2_agencia'
如果索引存在,为什么返回此消息?
这将是一个错误的版本?我在Linux上的两台服务器(版本5.6.23和5.6.29)上进行了测试,都出现了相同的问题。

问题在于排序。我发现bdo2_login和bdo2_agencia表的CHARSET=utf8,但没有意识到工作台将新表设置为latin1。这足以击中解决的字符集和排序规则

我在FK的另一个创建中也遇到了同样的问题,问题是只对列进行排序。该表具有PK had排序规则utf8,列创建为FK latin1。这个问题解决了,这就足够了