2016-05-20 9 views
0

Ich muss den Zeichensatz für zwei MySQL-Tabellen in UTF8 ändern. Zunächst habe ich die folgende Abfrage erstellt, aber ich wollte wissen, ob dies eine sichere Methode ist, den Zeichensatz in (Live-) Tabellen zu ändern, die Fremdschlüssel haben. In meiner Entwicklungsumgebung habe ich einfach die "FOREIGN_KEY_CHECKS = 0" ohne das Schloss benutzt, aber ich war nicht so besorgt über die Integrität zu der Zeit, mit dem Live-System, das ich bin.ist dies eine sichere Möglichkeit, Zeichensatz für eine MySQL-Tabelle in UTF-8 zu ändern

LOCK TABLES 
    tags WRITE, 
    tags_lost WRITE; 

    SET FOREIGN_KEY_CHECKS = 0; 

    ALTER TABLE myDB.exampleTable CHARACTER SET utf8 COLLATE utf8_general_ci; 
    ALTER TABLE myDB.exampleTable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 
    ALTER TABLE myDB.exampleTable CHARACTER SET utf8 COLLATE utf8_general_ci; 
    ALTER TABLE myDB.exampleTable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

    SET FOREIGN_KEY_CHECKS = 1;  
UNLOCK TABLES; 

Die andere Option ist, um die Tabellen zu sperren, den Fremdschlüssel fallen, ändern Sie den Zeichensatz, und dann den Schlüssel neu, aber ich habe nur gehofft, diese Verknüpfung genauso gut funktionieren würde.

+0

Sie möchten nicht zu UTF8 wechseln, sondern zu 'UTF8mb4' wechseln, [bitte lesen Sie, warum das so ist] (http://stackoverflow.com/a/279279/3536236) – Martin

Antwort

0

Den Zeichensatz nicht ändern, nur die ALTER ... CONVERT TO .... Letzteres tut sowohl die Erklärung und die Daten.

Wenn Sie bereits beide getan haben, überprüfen Sie die Daten:

SELECT col, HEX(col) FROM exampleTable WHERE ... 

und mal sehen, ob die hex korrekt ist. Du hättest mit der gefürchteten "doppelten Kodierung" enden können.

Verwandte Themen