Tietokannan merkistön vaihtaminen WordPressissä on yksi niistä operaatioista, jotka näyttävät yksinkertaisilta mutta voivat käytännössä rikkoa koko sivuston, jos niitä ei tehdä oikein. Erityisesti siirtyminen vanhasta utf8-merkistöstä moderniin utf8mb4-merkistöön on yleinen tarve, koska se mahdollistaa esimerkiksi emojien ja laajempien Unicode-merkkien käytön.
WordPress tukee utf8mb4-merkistöä jo useiden versioiden ajan, mutta migraatio vanhasta tietokannasta ei ole pelkkä asetuksen vaihto. Se on monivaiheinen prosessi, joka koskee tauluja, indeksejä, sarakkeita ja jopa palvelimen asetuksia.
Miksi charset-migraatio on tarpeen
Vanha MySQL:n utf8-merkistö on harhaanjohtava nimi. Se ei ole oikea UTF-8, vaan:
-
tukee vain 3 tavun merkkejä
-
ei tue emojia
-
ei tue monia harvinaisempia Unicode-merkkejä
utf8mb4:
-
tukee 4 tavun merkkejä
-
on oikea UTF-8-implementaatio
-
on WordPressin suositusmerkistö
Ilman migraatiota käyttäjien syöttämät emojit voivat:
-
kadota
-
muuttua kysymysmerkeiksi
-
aiheuttaa tietokantavirheitä
Missä charset määritellään WordPressissä
WordPress käyttää merkistöä, joka määritellään:
wp-config.php
Esimerkiksi:
>define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');
Tämä ei kuitenkaan muuta olemassa olevia tauluja automaattisesti. Se vaikuttaa vain:
-
uusiin tauluihin
-
uusiin sarakkeisiin
Vanha data pysyy vanhassa merkistössä.
Mitä migraatio oikeasti tarkoittaa
Charset-migraatio sisältää yleensä:
-
Tietokannan oletusmerkistön muuttamisen
-
Jokaisen taulun konvertoinnin
-
Jokaisen tekstisarakkeen konvertoinnin
-
Indeksien tarkistamisen
Tyypillinen SQL-komento:
ALTER TABLE wp_posts
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Tämä:
-
muuttaa kaikki tekstikentät
-
päivittää merkistön
-
muuntaa datan
Indeksien pituus ja suurin sudenkuoppa
Yksi yleisimmistä migraatiovirheistä liittyy indekseihin.
Vanha utf8:
-
3 tavua per merkki
utf8mb4:
-
4 tavua per merkki
Jos taulussa on indeksi:
VARCHAR(255)
se vie:
-
utf8: 255 × 3 = 765 tavua
-
utf8mb4: 255 × 4 = 1020 tavua
Vanhemmissa MySQL-versioissa indeksin maksimi oli:
-
767 tavua
Tämä tarkoittaa, että migraatio voi epäonnistua virheeseen:
Specified key was too long
WordPressin automaattinen migraatio
WordPress yrittää tehdä migraation automaattisesti, jos:
-
MySQL-versio tukee utf8mb4:ää
-
InnoDB-asetukset sallivat pidemmät indeksit
Se tarkistaa:
-
innodb_large_prefix -
riviformaatin
-
MySQL-version
Jos ympäristö ei täytä vaatimuksia, WordPress jättää migraation tekemättä.
Yleiset migraatio-ongelmat
1. Sekamerkistö tietokannassa
Tilanne, jossa:
-
osa tauluista on utf8
-
osa utf8mb4
-
osa latin1
Tämä voi aiheuttaa:
-
vertailuvirheitä SQL:ssä
-
rikkinäisiä merkkejä
-
hakujen epäonnistumista
2. Kaksoiskoodaus
Jos data on:
-
tallennettu latin1:ssä
-
mutta tulkittu utf8:na
migraatio voi:
-
rikkoa merkit pysyvästi
-
tuottaa roskadataa
3. Pitkät indeksit lisäosissa
Monet lisäosat luovat tauluja, joissa on:
-
pitkiä varchar-kenttiä
-
useita indeksejä
Migraatio voi epäonnistua vain näissä tauluissa, vaikka core-taulut toimisivat.
Turvallinen migraatiostrategia
1. Täysi varmuuskopio
Ennen migraatiota:
-
dump koko tietokanta
-
testaa palautus
Charset-migraatio on helposti peruuttamaton ilman backupia.
2. Testiympäristö
Suorita migraatio:
-
staging-ympäristössä
-
kopioidulla datalla
Tarkista:
-
merkkien eheys
-
hakutoiminnot
-
REST API
3. Taulu kerrallaan -strategia
Migroi:
-
yksi taulu kerrallaan
-
tarkista virheet
-
jatka seuraavaan
Tämä helpottaa ongelmien paikallistamista.
Yhteenveto
WordPressin charset-migraatio, erityisesti siirtyminen utf8:sta utf8mb4:ään, on tärkeä mutta teknisesti herkkä operaatio. Suurimmat riskit liittyvät:
-
indeksien pituusrajoihin
-
sekamerkistöön tietokannassa
-
kaksoiskoodattuun dataan
-
lisäosien taulurakenteisiin
Oikein tehtynä migraatio mahdollistaa:
-
täydellisen Unicode-tuen
-
emojien käytön
-
paremman yhteensopivuuden modernien järjestelmien kanssa
Tietokannan merkistö on kuin kieli, jota järjestelmä puhuu itsensä kanssa. Jos kieli vaihtuu kesken lauseen, syntyy helposti teknistä babbelia, jota mikään parseri ei enää ymmärrä. Siksi migraatio kannattaa tehdä harkiten, testaten ja varmuuskopioiden kanssa.
