da en en da en en sv da en en da da en en sv fr de en en en en en en sv fr de de fr en en uz en en en da da en da da da da en da da en en sv fr de de fr fr fr sv en fr en ja fr de fr es nb fr de en en sv de de fr en fr it fr de fr da en en da en en en en en en en en en en en en ceb en en en da en en et en en da nb en da nb nb da da nb en nb da da da da en da zh en zh en en da en da da da sv da nb nb en da da da da en nl da sv da en
MariaDB: Konvertering af karaktersæt fra latin1 til utf8mb4 – NerdGirl
Forbud fører sjældent noget godt med sig
(Last Updated On: 26. november 2020)
Jeg valgte at få en længe tiltrængt konvertering overstået, da vi alligevel skulle i gang med at flytte databasen til en ny server. Både den gamle og den nye server er Ubuntu. Hvis du bruger noget andet, så vær opmærksom på at dine konfigurationsfiler måske ligger et andet sted.
På den nye server sørgede jeg for, at alt var konfigureret til utf8mb4. Det burde være ligetil, da utf8mb4, nu om stunder, er standard for nye installationer af MariaDB.
Dump dine data på den gamle server:
Herefter skal data indlæses på den nye server:
mysql -u bruger -pkode db_navn < mysqldump_slave-latin.sql
mysql -u bruger -pkode db_navn < mysqldump_slave-latin.sql
Når databasen er indlæst, skal du i gang med at konvertere:
-- Tjek systemets karaktersæt SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%' -- Det skal helst se således ud: +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+----------------------------+ --Rediger databasens karaktersæt ALTER DATABASE db_navn CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; --Konverter en tabel ALTER TABLE `tabel_navn` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; --Konverter en kolonne ALTER TABLE `tabel_navn` CHANGE `kol_navn` `kol_navn` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci --Nu er både tabel og tabellens felter konverteret til utf8mb4 SHOW CREATE TABLE `tabel_navn`; SHOW FULL COLUMNS FROM `tabel_navn`;
-- Tjek systemets karaktersæt
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'
-- Det skal helst se således ud:
| Variable_name            | Value                      |
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8mb4_unicode_ci         |
| collation_database       | utf8mb4_unicode_ci         |
| collation_server         | utf8mb4_unicode_ci         |
ALTER DATABASE db_navn CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `tabel_navn` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `tabel_navn` CHANGE `kol_navn` `kol_navn` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
--Nu er både tabel og tabellens felter konverteret til utf8mb4
SHOW CREATE TABLE `tabel_navn`;
SHOW FULL COLUMNS FROM `tabel_navn`;
Jeg har over 100 tabeller i databasen, og valgte derfor at udvikle et script til formålet. Her sørgede jeg også for at output indeholdt eventuelle fejl. Hver gang jeg stødte på en fejl, tilrettede jeg scriptet således at disse blev håndteret.
Et eksempel på en af disse fejl er når systemet opdager, at indholdet i en eller flere rækker/kolonner kommer til at fylde for meget efter konverteringen. Det kan ske fordi utf8 benytter flere bytes end latin1. Tilsyneladende behøver du ikke udvide feltet på forhånd, men kan gøre det samtidig med konverteringen af karaktersættet, således at du for et MEDIUMTEXT felt, blot angiver LONGTEXT:
ALTER TABLE `tabel_navn` CHANGE `kol_navn` `kol_navn` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
ALTER TABLE `tabel_navn` CHANGE `kol_navn` `kol_navn` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
Konverteringen kan tage temmelig lang tid for store databaser. Jeg lagde derfor ud med at eksperimentere med databasen fra vores udviklingsmiljø, da den er noget mindre. Når så den konvertering lykkes, kan du udlæse et dump af din live database og teste at denne konvertering også lykkes tilfredsstillende.
Du kan også være uheldig at konverteringen lykkes, men du bagefter opdager at nogle karakterer ikke er korrekte, men er erstattet med spørgsmålstegn eller et andet underligt tegn. Det opstår når dine data har indeholdt tegn der ikke er i overensstemmelse med det karaktersæt der er registreret på tabellen. Systemet vil i det tilfælde ikke fejle under konverteringen fordi mysql er ret ligeglad med hvilket karaktersæt du skriver til et tekstfelt, så her kan du risikere at skulle ud i et større oprydningsarbejde.
Hvis der sådan helt generelt er skrevet utf8 til en latin1 database, kan konverteringen ske ved først at konvertere feltet til BLOB og derefter til det nye karaktersæt.
Under forberedelsen til denne øvelse, søgte jeg en del på nettet for at gøre mig bekendt med andres erfaringer. Denne artikel var den mest informative jeg fandt, med indhold der rent faktisk fungerede:
Converting Database Character Sets
MariaDB var i dette tilfælde sat op til standard latin1, men vi havde også en utf8 database der var kommet til senere. Jeg var i det tilfælde nød til at dumpe utf8 databasen for sig selv:
mysqldump --dump-slave=2 --skip-triggers --routines -u bruger -pkode --default-character-set=utf8 --add-drop-database --databases min_utf8_db > mysqldump_slave-utf8.sql
mysqldump --dump-slave=2 --skip-triggers --routines -u bruger -pkode --default-character-set=utf8 --add-drop-database --databases min_utf8_db > mysqldump_slave-utf8.sql
Posted in Computer, Server Tagged konvertering, latin1, linux, mariadb, utf8, utf8mb4
Ubuntu 20.04: Subversion repository
Installation af Elasticsearch 7 på Ubuntu 20
I gang med Angular 13 på Linux
Brug af grep kommandoen
Installer Asbru Connection Manager på Fedora
Installer DBeaver på Fedora
Node Package Manager (npm)
Linux: Afvikle en kommando som en anden bruger
MariaDB: Slå generel log til midlertidigt
Udskift nouveau driver med NVIDIA på Fedora 33 – og fortryd
Skab overblik over dine DMARC rapporter
Kategorier Vælg kategori Aftensmad Akrylmaling Bagværk Computer Dessert Fotografi Generelt Grød Hakket oksekød Hobby Hvidkål Ikke kategoriseret Internet IT Krop og sind PHP Pizza Politik Samfund Server Tips & Tricks Vegansk Webudvikling
Arkiver Vælg måned august 2022 april 2022 marts 2022 oktober 2021 maj 2021 marts 2021 februar 2021 januar 2021 december 2020 november 2020 oktober 2020 august 2020 juli 2020 juni 2020 marts 2020 januar 2020 december 2019 november 2019 oktober 2019 august 2019 juni 2019 april 2019 februar 2019 december 2018 oktober 2018 september 2018 juli 2018 juni 2018 maj 2018 april 2018 februar 2018 januar 2018 december 2017 oktober 2017 september 2017 august 2017 juli 2017 juni 2017 maj 2017 april 2017 januar 2017 december 2016 november 2016 oktober 2016 september 2016 januar 2016 december 2015 november 2015 oktober 2015 september 2015
Proudly powered by WordPress | Theme: chichi by xtianmark.