Cover Image

Hvordan konvertere MySQL/MariaDB-databaser til nytt tegnsett etter oppretting

 Sun 2023-01-08    DB

Jeg har en database som ikke er satt opp med UTF8 som tegnsett. Databasen inneholder tabeller, som igjen inneholder data. Jeg trenger å konvertere databasen og tabellene til UTF8mb4. Hvordan kan jeg gjøre det?

Enkelt (med noen forbehold):

  1. Lag en backup. Alltid.
    mysqldump -uroot -pPASSWORD databasename > databasename.sql
  2. Logg inn i MySQL/MariaDB:
    # mysql -uroot -pPASSWORD
  3. > show databases;
  4. > use databasename;
  5. > ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  6. > show tables;
  7. Kjør denne kommandoen for hver eneste tabell i databasen:
    > ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Hvis noen av tabellene bruker Foreign Key Constraints, kan du få feilmeldinger som denne:

Cannot change column 'XXXX': used in a foreign key constraint (...)

En løsning kan være å kjøre følgende kommandoer:

Sjekk om FOREIGN_KEY_CHECKS er aktivert (returnerer 1):

> SELECT @@FOREIGN_KEY_CHECKS;

Hvis den returnerer 1, kjør:

> SET FOREIGN_KEY_CHECKS=0;

Du kan da kjøre ALTER TABLE-kommandoene igjen for tabellene som gav feilmeldinger. Kjør SET FOREIGN_KEY_CHECKS=1; når du er ferdig og sjekk at du igjen får returnert 1.