MySQL-无法添加外键约束-拉丁文/西里尔文


MySQL - Cannot add foreign key constraint - Latin/Cyrillic

这是我的最后手段,因为我已经尝试了在谷歌和Stack Overflow上找到的一切。

在问这个问题之前,我已经彻底地寻找了答案。我发现人们从MySQL中收到了相同的错误消息,但他们的解决方案对我来说是而不是,因为我没有做错特定的事情(不同的列类型)。

我有一个外键问题,它们相同的类型(varchar(xx),其中xx在两种情况下都是相同的长度;NOT NULL),但仍然会给我一个错误,PHPMyAdmin的命令SHOW ENGINE INNODB STATUS将其描述为:

2015-03-24 16:04:21 66c表arhiva/privillegija的外键约束错误:
外键(korisnik_ime)参考korisnik(ime),
外国密钥(firma_naziv)参考firma(naziv)
):
在引用的表中找不到索引,其中被引用列显示为第一列或列类型表中的和引用的表中的约束不匹配。

这是我的数据库模式,很抱歉使用了非英文名称(顺便说一句,我第一次遇到这个问题时,列名是西里尔字母,但即使在我将它们转换为拉丁语之后——你在这里看到的是——我的问题没有解决):

DROP DATABASE IF EXISTS arhiva;
CREATE DATABASE arhiva
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_general_ci;
USE arhiva;
CREATE TABLE `korisnik` (
  ime VARCHAR(30) NOT NULL ,
  lozinka CHAR(60) NOT NULL
);
CREATE TABLE `firma` (
  naziv VARCHAR(50) NOT NULL
);
CREATE TABLE `privilegija` (
  korisnik_ime VARCHAR(30) NOT NULL ,
  firma_naziv VARCHAR(50) NOT NULL ,
  pristap CHAR(1) NOT NULL ,
  FOREIGN KEY (korisnik_ime) REFERENCES korisnik(ime) ,
  FOREIGN KEY (firma_naziv) REFERENCES firma(naziv)
);

你能告诉我解决这个问题的正确方向吗。我原以为使用西里尔字母是个问题,但事实证明问题出在其他地方。

添加PRIMARY KEY(),如下所示:

CREATE TABLE `korisnik` (
ime VARCHAR(30) NOT NULL ,
lozinka CHAR(60) NOT NULL,
PRIMARY KEY(ime)
);
CREATE TABLE `firma` (
naziv VARCHAR(50) NOT NULL,
PRIMARY KEY(naziv)
);

现在您有了一个索引,所以外键约束应该起作用。