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

标签 php mysql phpmyadmin cyrillic utf8mb4

这是我最后的选择,因为我已经尝试了在 Google 和 Stack Overflow 上可以找到的所有内容。

在问这个问题之前,我已经彻底搜索了答案。我发现人们从 MySQL 收到了相同的错误消息,但他们的解决方案对我有用,因为我没有做错那件事(不同的列类型)。

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

2015-03-24 16:04:21 66c Error in foreign key constraint of table arhiva/privilegija:
FOREIGN KEY (korisnik_ime) REFERENCES korisnik(ime) ,
FOREIGN KEY (firma_naziv) REFERENCES firma(naziv)
):
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.

这是我的数据库架构,对于非英文名称感到抱歉(顺便说一句,我第一次遇到这个问题时,列名称是西里尔字符,但即使在我将它们转换为拉丁文之后 - 你在这里看到的 -我的问题没有解决):

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)
);

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

关于php - MySQL - 无法添加外键约束 - 拉丁文/西里尔文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235907/

相关文章:

php - 在同一个 Mysql 查询中使用 AND 和 OR

c# - 如何从Windows窗体应用程序C#将数据保存到xampp phpmyadmin mysql数据库

php - 将文件从 VueJS 应用程序上传到 Laravel 中的 API

php - 如何仅在从 mysql 数据库中选择一行时执行 python 代码块

sql - MySQL Workbench 无法在 ubuntu 上打开

php - Innodb 全文搜索中的转义 @ 符号

php - 试图创建数据库,但出现 mysql 错误 [Syfony2]

Mysql触发器约束检查

php - 从数组 PHP 中提取 [cat_ID]

php - 如果 mysql 中的字段已完成则重定向