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

Änderung der MySQL-Zeichenkodierung. Ist die Datenintegrität gewahrt?

Jede (zeichenkettenartige) Spalte hat seine eigene Zeichensatz und Sortierungsmetadaten.

Wenn, wenn die Spalte der Datentyp von angegeben wurde (d. h. bei der letzten Erstellung oder Änderung), kein Zeichensatz/Kollatierung explizit angegeben wurde, dann würden der Standardzeichensatz und die Kollatierung der Tabelle für die Spalte verwendet.

Wenn, wann die Tabelle angegeben wurde, wurde kein Standardzeichensatz/-sortierung explizit angegeben, dann würden der Standardzeichensatz und die Standardsortierung der Datenbank für den Standardwert der Tabelle verwendet.

Die Befehle, die Sie in Ihrer Frage zitieren, ändern lediglich solche Standardzeichensätze/Sortierungen für die Datenbank bzw. die Tabelle. Mit anderen Worten, sie wirken sich nur auf Tabellen und Spalten aus, die danach erstellt werden – nicht vorhandene Spalten (oder Daten) beeinflussen.

Um vorhandene Daten zu aktualisieren, sollten Sie zuerst den Ändern des Zeichensatzes Abschnitt der Handbuchseite zu ALTER TABLE :

Um nur die Standardeinstellung zu ändern Zeichensatz für eine Tabelle verwenden Sie diese Anweisung:

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

Das Wort DEFAULT es ist optional. Der Standardzeichensatz ist der Zeichensatz, der verwendet wird, wenn Sie den Zeichensatz nicht für Spalten angeben, die Sie später zu einer Tabelle hinzufügen (z. B. mit ALTER TABLE ... ADD column). ).

Wenn die foreign_key_checks Systemvariable aktiviert ist, was die Standardeinstellung ist, ist die Zeichensatzkonvertierung für Tabellen, die eine Zeichenfolgenspalte enthalten, die in einer Fremdschlüsseleinschränkung verwendet wird, nicht zulässig. Die Problemumgehung besteht darin, foreign_key_checks zu deaktivieren bevor Sie die Zeichensatzkonvertierung durchführen. Sie müssen die Konvertierung für beide Tabellen durchführen, die an der Fremdschlüsseleinschränkung beteiligt sind, bevor Sie foreign_key_checks . Wenn Sie foreign_key_checks wieder aktivieren nach Konvertierung nur einer der Tabellen ein ON DELETE CASCADE oder ON UPDATE CASCADE Der Vorgang könnte aufgrund der impliziten Konvertierung, die während dieser Vorgänge auftritt, Daten in der referenzierenden Tabelle beschädigen (Bug #45290, Bug #74816).