Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🛠 MySQL-koodauksen vaihtaminen Laragonissa: latin1_swedish_ci:stä utf8mb4_unicode_ci:hin

🛠 MySQL-koodauksen vaihtaminen Laragonissa: latin1_swedish_ci:stä utf8mb4_unicode_ci:hin

Loit tietokannan phpMyAdminissa, asensit WordPressin, ja viikkoa myöhemmin huomasit tauluissasi luettavien merkkien sijaan sekalaista sotkua. Avaat asetukset ja näet latin1_swedish_ci. Jokainen, joka käyttää Laragonia Windowsilla, törmää tähän yllätykseen ennemmin tai myöhemmin.

Ongelma on siinä, että Laragonin oletuksena asentama MySQL-versio perii ikivanhan oletuksen: latin1 merkistöksi ja latin1_swedish_ci vertailuksi. Venäjän kielelle tämä on katastrofi: kyrilliset merkit kirjoitetaan kysymysmerkkeinä tai siansaksana, merkkijonojen lajittelu hajoaa ja lisäosat kaatuvat virheisiin.

Alla on kaksi muutosta yhteen tiedostoon, jotka ratkaisevat tämän ongelman pysyvästi. Tähän menee kolme minuuttia. Toimii Laragon 6:ssa, 5:ssä ja jopa vanhassa versiossa 4.

💡 Pikaopas:

  • Avaa my.ini Laragon-valikon kautta ja lisää kaksi riviä [mysqld]-osioon
  • Valitse utf8mb4_unicode_ci optimaaliseksi vaihtoehdoksi WordPressille vuonna 2026 (ja kerromme miksi)
  • Tallenna tiedosto, käynnistä MySQL uudelleen ja varmista tulos phpMyAdminissa
  • Bonus: miten vaihdat olemassa olevan tietokannan merkistökoodauksen ilman tietojen menetystä

Miksi oletusmerkistöllä on ylipäätään väliä

MySQL toimii monitasoisella periytymisjärjestelmällä: palvelin → tietokanta → taulu → sarake. Jos palvelintasolla on asetettu latin1_swedish_ci, jokainen uusi tietokanta perii sen, ellei luonnin yhteydessä toisin määritetä.

WordPressille tämä on kriittistä, koska:

  • Ydin, teemat ja useimmat lisäosat tallentavat sisällön utf8mb4-muodossa
  • Luodessaan tietokantaa automaattisesti wp-config.php-tiedoston kautta WordPress EI ohita palvelimen oletusta
  • Palvelimen ja taulujen välinen merkistöristiriita tuottaa "epäselviä" virheitä: ??? hallintapaneelissa, rikkinäisiä merkkejä JSON REST API:ssa, kaatumisia viennin yhteydessä

W3Techs-datan mukaan WordPress pyörittää 43,5% kaikista internetin verkkosivustoista, ja itse CMS on vaatinut utf8mb4-merkistöä versiosta 4.2 lähtien täyden emoji-tuen takaamiseksi. Laragon on yksi suosituimmista Windowsin paikallispalvelimista, mutta sen MySQL-versio toimitetaan taaksepäin yhteensopivuuden vuoksi konservatiivisella oletuksella. Tästä ristiriita johtuu.

Vaihe 1: Avaa my.ini Laragon-valikon kautta

Helpoin tapa päästä MySQL:n asetustiedostoon on Laragonin sisäänrakennetun valikon kautta:

  • Napsauta Laragon-kuvaketta hiiren kakkospainikkeella ilmaisinalueella
  • Valitse Menu → MySQL → my.ini
Laragon-valikko, jossa MySQL my.ini -vaihtoehto

Muistio (tai oletuseditorisi) avautuu ja näyttää koko MySQL-asetustiedoston. Tiedosto on jaettu hakasulkeissa oleviin osioihin: [client], [mysqld] ja [mysqldump]. Meitä kiinnostaa [mysqld] (MySQL-taustapalvelun asetusosio).

Jos valikko ei jostain syystä avaa tiedostoa, etsi se käsin: C:\laragon\bin\mysql\<version>\my.ini. Laragon 6 -versioissa polku voi olla C:\laragon\bin\mysql\mysql-8.0.30-winx64\my.ini asennetusta versiosta riippuen.

Vaihe 2: Lisää kaksi riviä [mysqld]-osioon

Vieritä [mysqld]-osioon ja lisää seuraavat kaksi riviä loppuun (ennen seuraavaa osiota, jos sellainen on):

1character_set_server = utf8mb4
2collation_server = utf8mb4_unicode_ci

Mitä tässä tapahtuu:

  • character_set_server = utf8mb4 käskee palvelinta käyttämään oletuksena UTF-8 Multilingual Version 4 -koodausta, joka tukee KAIKKIA Unicode-merkkejä, mukaan lukien emojit, kyrilliset aakkoset ja hieroglyfit
  • collation_server = utf8mb4_unicode_ci asettaa merkkijonojen vertailusäännön: _unicode_ tarkoittaa "Unicode-standardin mukaan", _ci tarkoittaa kirjainkoosta riippumatonta vertailua

Sinun on lisättävä nämä rivit nimenomaan [mysqld]-osioon, ei [client]- tai [mysqldump]-osioon. Väärän osion käyttö on yleisin syy sille, miksi "mikään ei muuttunut".

Koko osion pitäisi näyttää muokkauksen jälkeen suunnilleen tältä:

1[mysqld]
2port=3306
3socket=/tmp/mysql.sock
4key_buffer_size=256M
5max_allowed_packet=512M
6character_set_server = utf8mb4
7collation_server = utf8mb4_unicode_ci

Vaihe 3: Tallenna tiedosto ja käynnistä MySQL uudelleen

Tallenna my.ini (Ctrl+S) ja käynnistä MySQL uudelleen. Laragonissa tämä tehdään saman valikon kautta:

  • Napsauta Laragon-kuvaketta hiiren kakkospainikkeella ilmaisinalueella
  • Menu → MySQL → Stop
  • Odota 3-5 sekuntia
  • Menu → MySQL → Start

Vaihtoehtoisesti napsauta Menu → Restart, jolloin Laragon pysäyttää ja käynnistää kaikki palvelut kerralla.

Uudelleenkäynnistyksen jälkeen uudet tietokannat luodaan oletuksena utf8mb4_unicode_ci-merkistöllä. Olemassa olevia tietokantoja EI muuteta automaattisesti. Lue alla oleva "Usein kysytyt kysymykset" -osio oppiaksesi, miten olemassa oleva tietokanta muunnetaan.

Vaihe 4: Varmista tulos phpMyAdminissa

Avaa phpMyAdmin Laragon-valikon kautta (Menu → MySQL → phpMyAdmin) ja luo testitietokanta:

  • Klikkaa "Create database"
  • Anna mikä tahansa nimi
  • Katso "Collation"-pudotusvalikkoa: sen pitäisi nyt olla oletuksena utf8mb4_unicode_ci
Tietokannan luonti-ikkuna phpMyAdminissa utf8_general_ci-merkistökoodauksella

Jos pudotusvalikko näyttää edelleen latin1_swedish_ci, varmista, että character_set_server- ja collation_server-rivit on lisätty [mysqld]-osioon (ei [client]-osioon) ja ettei parametrin nimen ja =-merkin välissä ole ylimääräisiä välilyöntejä.

Nopea varmistus SQL-kyselyllä (suorita phpMyAdminin SQL-välilehdellä):

1SHOW VARIABLES LIKE 'character_set_server';
2SHOW VARIABLES LIKE 'collation_server';

Molempien muuttujien pitäisi palauttaa utf8mb4 ja utf8mb4_unicode_ci.

Mikä koodaus valita: vaihtoehtojen vertailu

MySQL-koodaukseen on kertynyt monia myyttejä, joten puretaan kolme ajankohtaista vaihtoehtoa ja yksi vanhentunut:

Koodaus

MySQL-versio

Emoji

Lajittelu

Yhteensopivuus

Tuomio

utf8_general_ci

Mikä tahansa

❌ Ei

Yksinkertaistettu, nopea

Maksimaalinen

Vanhentunut, älä käytä

utf8mb4_unicode_ci

5.5.3+

✅ Kyllä

Unicode-standardi (UCA 4.0)

Erinomainen

Suositeltu Laragonille

utf8mb4_0900_ai_ci

8.0+

✅ Kyllä

UCA 9.0, AI (aksenttitiedoton)

Vain MySQL 8+

Moderni standardi, mutta rajallinen tuki

utf8mb4_general_ci

5.5.3+

✅ Kyllä

Yksinkertaistettu

Erinomainen

Nopeuden ja tarkkuuden kompromissi

Miksi suosittelemme utf8mb4_unicode_ci-merkistöä paikalliseen kehitykseen Laragonissa:**

  • Laragon toimitetaan eri MySQL-versioilla (5.7:stä 8.0+:aan), ja utf8mb4_0900_ai_ci ilmestyi vasta MySQL 8.0:ssa ja puuttuu MariaDB:stä, joka tulee usein vaihtoehtoisten koontiversioiden mukana
  • utf8mb4_unicode_ci toimii kaikkialla MySQL 5.5.3:sta (2010) lähtien
  • Lajittelun laadun ero unicode_ci- ja 0900_ai_ci-vertailujen välillä on merkityksetön tyypilliselle WordPress-sivustolle
  • Jaetut hosting-paketit käyttävät usein MySQL 5.7:ää. Jos kehität paikallisesti 0900_ai_ci-vertailulla, mutta se puuttuu tuotannosta, saat virheen migraation aikana

Jos tiedät varmasti, että tuotantopalvelimesi käyttää MySQL 8.0+:aa ja paikallinen Laragonisi käyttää MySQL 8.0:aa, valitse utf8mb4_0900_ai_ci. Tämä on Oraclen suosittelema moderni standardi, jossa on parempi monikielisen lajittelun tuki.

Entä utf8_general_ci? Se oli ajankohtainen noin kymmenen vuotta sitten, kun utf8mb4 ei ollut vielä laajalti tuettu. Nykyään sillä on kaksi kohtalokasta puutetta: se ei voi tallentaa emojeja (WordPress käyttää niitä aktiivisesti hallintapaneelissa) ja se lajittelee laajennetut merkit väärin. Ei ole mitään syytä käyttää sitä vuonna 2026.

Video: miten MySQL-tietokannan koodaus vaihdetaan phpMyAdminin kautta

Tekstiohjeet ovat hyviä, mutta joskus on helpompi nähdä se kerran. Tämä 4 minuutin video näyttää koko prosessin olemassa olevan tietokannan koodauksen vaihtamisesta phpMyAdmin-käyttöliittymän kautta taulujen valinnasta lopulliseen varmistukseen:

⁉️🤔 Usein kysytyt kysymykset

Minulla on jo tietokanta, jossa on latin1_swedish_ci. Miten vaihdan sen koodauksen?

Turvallisin tapa on phpMyAdminin kautta. Valitse tietokanta vasemmalta, siirry "Operations"-välilehdelle, valitse "Collation"-lohkosta utf8mb4_unicode_ci ja klikkaa "Go". phpMyAdmin luo ALTER-kyselyt jokaiselle taululle. Ennen tätä toimenpidettä varmista, että luot varmuuskopion: "Export"-välilehti → SQL-muoto → "Go".

Vaihdoin my.ini-tiedoston, käynnistin MySQL:n uudelleen, mutta phpMyAdmin näyttää edelleen latin1_swedish_ci. Mikä on vialla?

Kolme yleisintä syytä: (1) rivit lisättiin [client]-osioon [mysqld]-osion sijaan. Tarkista, minkä hakasulkeissa olevan osion alla ne ovat. (2) MySQL ei käynnistynyt uudelleen. Avaa Windowsin Tehtävienhallinta ja varmista, että mysqld.exe-prosessi katosi ja ilmestyi uudelleen. (3) my.ini-tiedostossa on useita [mysqld]-osioita. Näin käy joskus useiden Laragon-päivitysten jälkeen. Pidä vain yksi.

Kumpi on parempi WordPressille: utf8mb4_unicode_ci vai utf8mb4_general_ci?

WordPressille ero on minimaalinen. utf8mb4_unicode_ci lajittelee monikielisen sisällön tarkemmin (esimerkiksi saksan "ß" = "ss"), kun taas utf8mb4_general_ci on hieman nopeampi suurilla tietomäärillä, mutta ero on millisekunneissa. Valitse unicode_ci äläkä murehdi siitä.

Voinko vain määrittää koodauksen wp-config.php-tiedostossa?

define('DB_CHARSET', 'utf8mb4') ja define('DB_COLLATE', 'utf8mb4_unicode_ci') wp-config.php-tiedostossa vaikuttavat VAIN tauluihin, jotka WordPress itse luo asennuksen aikana. Palvelimen oletus pysyy muuttumattomana, ja mikä tahansa käsin phpMyAdminin kautta luotu tietokanta saa latin1_swedish_ci-merkistön. Siksi my.ini-tiedoston muokkaaminen on edelleen välttämätöntä.

Koodauksen vaihtamisen jälkeen osa sivuston tekstistä muuttui kysymysmerkeiksi. Onko tämä palautettavissa?

Kyllä, mutta sinun on edettävä varovasti. Kysymysmerkkejä ilmestyy, kun data on kirjoitettu latin1-muodossa, mutta sitä luetaan utf8-muodossa. Ratkaisu: vie tietokanta --default-character-set=latin1-lipulla ja tuo se sitten --default-character-set=utf8mb4-lipulla. Tarkka komento riippuu MySQL-versiostasi, joten katso virallista dokumentaatiota.

Yhteenveto: mitä lisätä my.ini-tiedostoon juuri nyt

Jos käytät Laragonia paikalliseen WordPress-kehitykseen, alla olevat kaksi riviä ratkaisevat koodausongelman lopullisesti:

1character_set_server = utf8mb4
2collation_server = utf8mb4_unicode_ci

Tämä vaihtoehto toimii kaikissa MySQL-versioissa 5.5:stä 8.4:ään ja kaikissa nykyisissä MariaDB-koontiversioissa. Se tallentaa oikein kyrilliset aakkoset ja emojit eikä aiheuta yllätyksiä tietokantaa paikallisesta tuotantoon siirrettäessä riippumatta siitä, mikä hosting-palvelu pyörittää tuotantopalvelintasi.

Onko kysyttävää tietystä Laragon-versiosta tai epätyypillisestä konfiguraatiosta? Katso ketju Laragon-foorumilla, jossa kehittäjät keskustelevat koodauksen konfiguroinnin vivahteista, mukaan lukien Docker-koontiversiot ja mukautetut portit. Ja jos tämä artikkeli säästi sinulta illan, jaa se kollegoillesi, jotka myös painivat latin1_swedish_ci-merkistön kanssa.