Die Daten Ihrer Spalten werden mit einem Zeichensatz gespeichert. In diesem Fall scheint es utf8 zu sein.
Wenn Sie diese Spalten bearbeiten (z. B. Gleichheitsvergleiche oder Ordnen), verwendet MySQL eine Sortierung. Jede Spalte hat eine Standardsortierung, die sie von der Standardsortierung der Tabelle erbt.
In Indizes ist die Standardsortierung der Spalte integriert, sodass sie effizient funktionieren können.
Sie können einen durch Sortierung qualifizierten Gleichheitsvergleich durchführen. Zum Beispiel in einem JOIN
Sie können angeben
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name
oder vielleicht
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)
Das sollte Ihre illegale Mischung von Zusammenstellungen eliminieren, ohne dass Sie Ihre Tabelle ändern müssen. Dies kann Ihnen helfen, die Datenbankänderung zu vermeiden, nach der Sie fragen. Aber Vorsicht bei der Verwendung von COLLATE
Qualifizierer kann die Verwendung eines Index verhindern. Wenn Sie eine große Tabelle haben und sich für die Leistung auf Indizes verlassen, ist dies möglicherweise nicht hilfreich.
Was passiert also, wenn Sie Ihre Tabellen ändern, um die Standardsortierung zu ändern?
- Ihre Daten ändern sich nicht (es sei denn, Sie ändern auch den Zeichensatz). Das ist gut.
- Alle Indizes, die Spalten mit Sortierungen beinhalten, werden neu generiert.
- Ihre Vergleiche und Bestellungen können sich ändern. Ich kann kein Türkisch, also kann ich dir nicht sagen, was kaputt gehen könnte. Aber zum Beispiel im Spanischen die Buchstaben N und Ñ sind nicht das Gleiche. N kommt vor Ñ in einer spanischen Sortierung, aber in der allgemeinen Sortierung werden sie gleich behandelt. Möglicherweise gibt es einen Aspekt des türkischen Alphabets, der genauso funktioniert, also Ihr
ORDER BY
Ergebnisse werden falsch sein.
Aber Sie können das beheben, indem Sie ein COLLATE
angeben Modifikator in Ihrem ORDER BY
Klausel.
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)