2017-11-08 1 views
0

Fremdschlüssel in verschiedenen Charset nicht funktionieren

Ich verwende Symfony mit Lehre ein neues Projekt zu machen. Aber die alten Tabellen haben den Standard-Zeichensatz, der sich von UTF-8 unterscheidet. Meine neuen Tabellen haben UTF8 Charset. Fortsetzen .. Ich habe eine Tabelle mit DEFAULT CHARSET = latin1 und eine neue Tabelle in UTF-8.Cant erstellen Fremdschlüssel zwischen zwei Tabellen mit unterschiedlichen CHARSET

UTF8 Tabelle hat eine Beziehung mit latin1 Tabelle. Aber ich den nächsten Fehler:

MySQL: Error 1005; Can't create table (errno: 150) 

Es gibt eine Möglichkeit, einen Fremdschlüssel zwischen Tabellen mit unterschiedlichen CHARSET zu machen? ODER, kann ich es mit ORM-Ebene tun?

+1

ich das Problem mit Lehre „gelöst“, i die Beziehung auf ORM-Pegel gesetzt, aber ich verlor die referentielle Integrität – Oscar

+1

„Es gibt eine Möglichkeit, einen Fremdschlüssel zu machen zwischen Tabellen mit verschiedenen CHARSET? NEIN gibt es nicht "Entsprechende Spalten im Fremdschlüssel und der referenzierte Schlüssel muss ähnliche Datentypen haben. Die Größe und das Vorzeichen von Integer-Typen müssen gleich sein. Die Länge von Zeichenfolgetypen muss nicht identisch sein. Für Nicht-Binärzeichen (Zeichen) String-Spalten müssen der Zeichensatz und die Sortierung übereinstimmen. " https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html –

+0

Ich hätte eine Antwort von ihr gemacht annyway es war ein bisschen aus einer Antwort Kommentar annyway –

Antwort

3

There is some way to make a foreign key between tables with different CHARSET ?

Auf MySQL-Ebene gibt es keine.

Corresponding columns in the foreign key and the referenced key must have similar data types. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same

Quelle http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.ht‌​ml

2

Wel, gibt es eine Möglichkeit, es zu tun, ist aber nicht auf SQL Ebene. Wenn Sie die Beziehung in Ihren Tabellen löschen können, weil Sie Doctrine verwenden, versuchen Sie Ihre Beziehung in der ORM Ebene.

wie in diesem Beispiel

(A Ticket ein Benutzer und Benutzer hat ein TicketOne to One Beziehung hat.):

class Ticket 
{ 
/** 
    * @var \AppBundle\Entity\User 
    * 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\User") 
    * @ORM\JoinColumn(name="adeq_user", referencedColumnName="id") 
    */ 
private $adeqUsers; 
} 

Dann Lehre mach die Beziehung für dich, aber der Tisch ist der gleiche, also wenn du Fragen Sie nach einem Ticket Sie erhalten den Benutzer, der gehört.

Unabhängig von dem Standard-Zeichensatz zu db

Verwandte Themen