我希望表
personOne
中的 b
列引用表 person
上的 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;
错误代码:3780。引用列“personOne”与外键约束“C”中引用的列“person”不兼容。
我尝试将表引擎设置为 InnoDB,但这不起作用。
两列必须具有相同的排序规则。我猜你的表
b
正在使用旧版本MySQL的默认排序规则,即latin1_swedish_ci
。
您可能想查看此外键清单:https://stackoverflow.com/a/4673775/20860
我建议最好的选择是声明
a
和 b
表,其中包含字符集 utf8mb4
和排序规则 utf8mb4_unicode_520_ci
(如果您的 MySQL 版本足够新以支持它)。
我得到了相同的错误代码。 虽然这可能对你的情况没有帮助,但我的问题是;
我所有表中的 ID 列都设置为
INT UNSIGNED
,但我使用的是 INT
类型签名的 外键。
这里我必须首先在
a
中定义一个主键:
ALTER TABLE a ADD PRIMARY KEY (person);
并传递
COLLATE
的a
值:
CREATE TABLE b (
...
)ENGINE=InnoDB
DEFAULT CHARSET=latin1
COLLATE latin1_general_ci;
请检查您的数据类型,即外键约束中的引用列和被引用列。例如。请检查这两个数据类型是否为 varchar、不是 null 或任何其他相同的数据类型,如果它们的数据类型不同,则会显示此错误