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):
mysqldump -uroot -pPASSWORD databasename > databasename.sql
# mysql -uroot -pPASSWORD
> show databases;
> use databasename;
> ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
> show tables;
> 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.