Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswirkungen der Aktualisierung einer Tabelle mit Zeilen von utf8_turkish_ci auf utf8_general_ci?

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?

  1. Ihre Daten ändern sich nicht (es sei denn, Sie ändern auch den Zeichensatz). Das ist gut.
  2. Alle Indizes, die Spalten mit Sortierungen beinhalten, werden neu generiert.
  3. 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)