Quanto segue avrà esito negativo perché le regole di confronto sono diverse. Perché lo mostro? Perché l'OP no.
Nota che ho ridotto la dimensione a causa dell'errore 1071 sul dimensionamento per varchar 255 con quella confronto e quindi il set di caratteri scelto automaticamente.
Il punto è che, se le regole di confronto sono diverse, non funzioneranno.
CREATE TABLE `user_details` (
`ClientID` VARCHAR(100) NOT NULL,
PRIMARY KEY (`ClientID`)
)ENGINE=InnoDB;
CREATE TABLE `profilePic` (
`ClientID` VARCHAR(100) NOT NULL,
PRIMARY KEY (`ClientID`),
CONSTRAINT `FK__user_details` FOREIGN KEY (`ClientID`) REFERENCES `user_details` (`ClientID`) ON UPDATE CASCADE ON DELETE CASCADE
)COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;
L'errore di cui sopra è a livello di tabella. Uno più complicato che causa un errore 1215 a causa di mancate corrispondenze di confronto a livello di colonna può essere visualizzato in questa risposta .
Tirando la discussione su casi più generali...
se stai cercando di stabilire un vincolo di chiave esterna sulla creazione della tabella o con ALTER TABLE
come
ALTER TABLE `facility` ADD CONSTRAINT `fkZipcode`
FOREIGN KEY (`zipcode`) REFERENCES `allzips`(`zipcode`);
si applica quanto segue.
Dalla pagina di manuale di MySQL intitolata Utilizzo di FOREIGN KEY Vincoli :
Inoltre, il riferito La tabella (principale) deve avere una chiave all'estrema sinistra disponibile per la ricerca rapida (verifica). Non è necessario che la chiave genitore sia PRIMARY
o anche UNIQUE
. Questo concetto è descritto nel secondo pezzo di seguito. Il primo pezzo allude a un Aiutante indice che verrà creato se necessario nel riferimento (figlio) tabella se necessario.