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.
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.