Bevor Sie fortfahren
Bevor Sie fortfahren, stellen Sie sicher, dass:
- Confluence abgeschaltet ist
- Ein vollständiges Datenbank Backup vorliegt
Es ist außerdem sinnvoller wenn Sie diese Änderugen zuerst in einer Testumgebung ausprobieren, bevor Sie die Schritte auf die Produktivumgebung übertragen.
Die Spalten mit den falschen Zeichensätzen oder Kollationen ermitteln
Ändern Sie "database" auf den Namen Ihrer Datenbank ab und starten Sie die folgende Abfrage:
SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'database' AND ( CHARACTER_SET_NAME != 'utf8' OR COLLATION_NAME != 'utf8_bin' );
Die Kollationen und Zeichensätze von varchar-Spalten anpassen
Damit Sie alle varchar-Spalten in Ihrer Datenbank anpassen können müssen Sie diese zuerst identifizieren. Das folgende Script erzeugt eine ALTER-TABLE-Anweisung für jede varchar-Spalte, die einen falschen Zeichensatz oder eine falsche Kollation benutzt. Ändern Sie "database" auf den Namen Ihrer Datenbank ab und starten Sie die folgende Abfrage:
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET UTF8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'database' AND DATA_TYPE = 'varchar' AND ( CHARACTER_SET_NAME != 'utf8' OR COLLATION_NAME != 'utf8_bin' );
Die Kollationen und Zeichensätze von nicht varchar-Spalten anpassen
Auch diese nicht varchar-Spalten müssen Sie zunächst erst ermitteln, bevor Sie sie dahin gehend anpassen können, dass sie die richtigen Kollationen verwenden. Das folgende Script generiert eine ALTER-TABLE-Anweisung für jede Spalte, die nicht varchar ist und die falsche Kollation oder den falschen Zeichensatz verwendet. Ändern Sie "database" in den Namen Ihrer Datenbank ab und starten Sie die folgende Abfrage:
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, ' CHARACTER SET UTF8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'database' AND DATA_TYPE != 'varchar' AND ( CHARACTER_SET_NAME != 'utf8' OR COLLATION_NAME != 'utf8_bin' );
Der Umgang mit Fremdschlüsseleinschränkungen
Manchmal ist es notwendig die Fremdschlüsseleinschränkungen bei Änderungen in vielen Spalten zu ignorieren. Mit dem Befehl SET FOREIGN_KEY_CHECKS können Sie die Fremdschlüsseleinschränkungen während eines Datenbankupdates ignorieren.
SET FOREIGN_KEY_CHECKS=0; -- Insert your other SQL Queries here... SET FOREIGN_KEY_CHECKS=1;
Weiterführende Quellen
- MySQL Kollationsreparatur: Änderungen auf Datenbank-Ebene
- MySQL Kollationsreparatur: Änderungen auf Tabellen-Ebene
- MySQL Kollationsreparatur: Änderungen auf Spalten-Ebene
- MySQL Kollationsreparatur: Kodierprobleme auf Spalten-Ebene
- MySQL Kollationsreparatur: Fallstudie - Reparatur einer Produktionsdatenbank