545 Stimmen

Wie konvertiert man den gesamten Zeichensatz und die Sortierung einer MySQL-Datenbank in UTF-8?

Wie kann ich den gesamten Zeichensatz der MySQL-Datenbank in UTF-8 und die Sortierung in UTF-8 konvertieren?

832voto

BalusC Punkte 1034465

Verwenden Sie die ALTER DATABASE y ALTER TABLE Befehle.

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Oder wenn Sie noch MySQL 5.5.2 oder älter verwenden, das 4-Byte-UTF-8 nicht unterstützt, verwenden Sie utf8 anstelle von utf8mb4 :

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

146voto

newspire Punkte 5904
  1. Erstellen Sie ein Backup!

  2. Dann müssen Sie die Standardzeichensätze in der Datenbank festlegen. Dabei werden keine bestehenden Tabellen konvertiert, sondern nur die Standardwerte für neu erstellte Tabellen festgelegt.

    ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
  3. Dann müssen Sie die Zeichensätze aller vorhandenen Tabellen und ihrer Spalten konvertieren. Dabei wird davon ausgegangen, dass Ihre aktuellen Daten tatsächlich in der aktuellen Zeichenkodierung vorliegen. Wenn Ihre Spalten auf einen Zeichensatz eingestellt sind, Ihre Daten aber in Wirklichkeit in einem anderen Zeichensatz gespeichert sind, müssen Sie die MySQL-Handbuch wie dies zu handhaben ist.

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

89voto

Arnold Daniels Punkte 16433

Auf der Kommandozeilen-Shell

Wenn Sie die Kommandozeilen-Shell verwenden, können Sie dies sehr schnell tun. Geben Sie einfach "dbname" ein :D

DB="dbname"
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
    mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
) \
| mysql "$DB"

Einzeiler für einfaches Kopieren/Einfügen

DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"

81voto

sdfor Punkte 6044

Sie können die Sql zum Aktualisieren aller Tabellen mit erstellen:

SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci;   ",
    "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ") 
    AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "your_database_name";

Erfassen Sie die Ausgabe und führen Sie sie aus.

Die obige Antwort von Arnold Daniels ist eleganter.

19voto

John Yin Punkte 7717

Bevor Sie fortfahren, stellen Sie sicher, dass Sie: eine vollständige Datenbanksicherung durchgeführt haben!

Schritt 1: Änderungen auf Datenbankebene

  • Identifizierung der Sortierung und des Zeichensatzes Ihrer Datenbank

    SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM 
    information_schema.SCHEMATA S
    WHERE schema_name = 'your_database_name'
    AND
    (DEFAULT_CHARACTER_SET_NAME != 'utf8'
        OR
     DEFAULT_COLLATION_NAME not like 'utf8%');
  • Festlegen der Sortierreihenfolge für die Datenbank

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Schritt 2: Änderungen auf Tabellenebene

  • Identifizierung von Datenbanktabellen mit falschem Zeichensatz oder falscher Sortierung

    SELECT CONCAT(
    'ALTER TABLE ',  table_name, ' CHARACTER SET utf8 COLLATE utf8_general_ci;  ', 
    'ALTER TABLE ',  table_name, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ')
    FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
    WHERE C.collation_name = T.table_collation
    AND T.table_schema = 'your_database_name'
    AND
    (C.CHARACTER_SET_NAME != 'utf8'
        OR
     C.COLLATION_NAME not like 'utf8%')
  • Anpassung der Sortierung und des Zeichensatzes von Tabellenspalten

Erfassen Sie die obere Sql-Ausgabe und führen Sie sie aus. (wie folgt)

ALTER TABLE rma CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_history CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_products CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_products CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_report_period CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_report_period CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_reservation CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_reservation CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return_history CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return_product CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return_product CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

beziehen sich auf: https://confluence.atlassian.com/display/CONFKB/How+zum+Fixieren+der+Kollation+und+des+Zeichensatzes+einer+MySQL+Datenbank

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X