Child pages
  • MySQL Kollationsreparatur: Änderungen auf Spalten-Ebene
Skip to end of metadata
Go to start of metadata

 



Bevor Sie fortfahren

(warning) 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





 

Confluence
  • No labels