web-dev-qa-db-fra.com

Erreur lors du référencement étranger dans MySQL (Erreur 3780)

Je fais deux tables et je veux la colonne personOne de la table b pour référencer la colonne person sur table a, mais pour une raison quelconque, mais pour une raison quelconque. t Travaux.

J'ai le code ci-dessous comme exemple:

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;

Il me dit une erreur:

Code d'erreur: 3780. Colonne de référencement "Personnelle" et la colonne référencée "Personne" dans la contrainte de clé étrangère 'c' sont incompatibles.

J'ai essayé de régler un moteur à InnoDB, mais cela n'a pas fonctionné. J'ai étudié le problème plus que je ne pouvais pas comprendre comment le réparer.

4
user12271400

Les deux colonnes doivent avoir la même collation. Je suppose que votre table b utilise la collation par défaut pour les anciennes versions de MySQL, qui est latin1_swedish_ci.

Vous aimerez peut-être revoir cette liste de contrôle pour les clés étrangères: https://stackoverflow.com/a/4673775/2086

Je suggère que le meilleur choix est de déclarer à la fois a et b tables avec le jeu de caractères utf8mb4 et collation utf8mb4_unicode_520_ci Si votre version de MySQL est suffisamment nouvelle pour la soutenir.

6
Bill Karwin