在 mySQL 中进行外部引用时出错(错误 3780)

use*_*400 7 mysql sql foreign-keys

我正在制作两个表,我希望personOnetableb中的person列引用table上的列a,但由于某种原因它不起作用。

我以下面的代码为例:

create table a(
person varchar(20),
cost varchar(10) not Null
)character set latin1
collate latin1_general_ci;


create table b(
personOne varchar(20),
personTwo varChar(2) not null,
key person_index (personOne),
CONSTRAINT C FOREIGN KEY (personOne) references a(person)
) engine=InnoDB default charset=latin1;
Run Code Online (Sandbox Code Playgroud)

它告诉我一个错误:

错误代码:3780。在外键约束“C”中引用列“personOne”和引用列“person”不兼容。

我试图将引擎设置为 InnoDB,但这没有用。我对这个问题进行了更多研究,但无法弄清楚如何解决它。

Bil*_*win 9

两列必须具有相同的排序规则。我猜您的表b使用的是旧版本 MySQL 的默认排序规则,即latin1_swedish_ci.

您可能想查看此外键清单:https : //stackoverflow.com/a/4673775/20860

如果您的 MySQL 版本足够新以支持它,我建议最好的选择是使用字符集和排序规则声明ab表。utf8mb4utf8mb4_unicode_520_ci