MySQL: Von UTF8 zu UTF8MB4

Tommy57

Erfahrenes Mitglied
Hi,

ich soll eine Datenbank, die komplett in UTF8 ist, auf UTF8MB4 umstellen, damit man Emoticons in die Textspalten ergänzen kann.

Gibt es da eine schnellere Variante alle Spalten der Datenbank von UTF8 auf UTF8MB4 umzustellen?
Gibt es irgendwas zu beachten, wie Probleme, die auftreten könnten?

Gruß, Tommy
 
Hi

alle Textspalten umzustellen könnte man theoretisch automatisieren, aber ... lohnt sich vermutlich nicht, und durch die folgenden Gründe ist manuell auch besser:

a) Backup

b) Zwischen erster und letzter Spalte besser den Webserver (oder was die DB sonst noch verwendet) abdrehen. Um sicher zu gehen.

c) Die Kollationen gehören natürlich auch mit umgestellt, nicht nur das Encoding.

d) Bei den Kollationen beachten, dass sie leicht anders sind als die gleichnamigen mb4-losen Versionen. Wenn es irgendwo für die Programmlogik wichtig ist, ob ß und ss als gleich verglichen werden oder nicht, oder ae und ä, a und ä, ä und Ä, usw., dann besser testen ob es nach wie vor passt. Selbes gilt für Sortierungen - ist ä gleich nach a, oder ganz am Schluss nach z? usw. (Hier wird Deutsch angenommen, für andere Sprachen gibts natürlich andere zu beachtende Sachen)

e) Durch die Kollationsänderung kann es zu Konflikten in Unique-Spalten kommen (weil zwei Strings plötzlich als gleich(wertig) betrachtet werden)

f) Backups mit Mysqldump können je nach Kompilierung und Aufruf evt. ein Problem mit Utf8mb4 haben (entweder dass die 4bytigen Zeichen nicht in der Datei landen, oder das die SQL-Anweisungen unpassend für eine Wiederherstellung sind. Besser beide Richtungen mal testen).

g) Die Verbindung zwischen DB und dem verwendenden Programm hat auch ein Charset, auch das muss MB4 werden

h) Wenn man Indizes (inkl. Keys, Unique usw.) auf Textspalten hat: Je nach Indextyp und DB-Engine gibts Bytelängenbeschränkungen. Varchar etc. mit einer Länge von n, mit 3n kleiner als die Indexbeschränkung, sind bei Mysqls utf8 ok. Wenn 4n aber über der Grenze liegen wird die Umstellung auf mb4 Probleme machen. (In dem Fall je nach Bedarf Spalte kürzen oder Index ändern)

i) Wenn Text in der DB irgendwo in Nichttextspalten gespeichert wird (Blob oder so), wirds umständlicher.

j) Wenn irgendwo Daten von PHPs serialize gespeichert sind, ggf. auch.
 
@sheel
Vielen Dank für die ausführliche Antwort. Ich verwende aktuell utf8_general_ci und würde es dann natürlich auf utf8mb4_general_ci ändern. Ich werde die Umstellung dann manuell machen.
 
Zurück