这是我最后的选择,因为我已经尝试了所有可以在 Google 和 Stack Overflow 上找到的东西。
在问这个问题之前,我已经彻底搜索了答案。我发现人们从 MySQL 收到相同的错误消息,但他们的解决方案没有做错特定的事情(不同的列类型)。
我有外键的问题,它们是相同的类型(varchar(xx)
,其中 xx 在两种情况下都是相同的长度;NOT NULL),但仍然给我一个错误,PHPMyAdmin 的命令将其描述SHOW ENGINE INNODB STATUS
为:
2015-03-24 16:04:21 66c 表 arhiva/privilegija 的外键约束错误:外键
(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)
);
你能指导我解决这个问题的正确方向吗?我认为使用西里尔字符是问题所在,但事实证明问题出在其他地方。