WordPress- ja tietokantaviennit: ä ja ’ merkkien ä ja ’ tilalla

Näkyykö artikkeleissasi yhtäkkiä ä merkin ä ja ’ merkin ’ tilalla siirron, päivityksen tai tietokantaviennin jälkeen? Tiedot ovat lähes aina yhä tallessa – ne vain luetaan väärällä koodauksella. Mojibuster korjaa viennin, ja sen jälkeen korjaat syyn tietokannassa.

Toimii tekstin ja näiden tiedostojen kanssa:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Esimerkiksi Excel-viennit, tietokantavarmuuskopiot, tekstitykset tai verkkosivujen koodi.

Korjaa

  1. Pudota tiedosto tai liitä teksti
  2. Korjaus tapahtuu automaattisesti
  3. Kopioi tai lataa
tai pudota tiedosto tähän

Miltä ongelma näyttää

Rivi SQL-vedoksesta palvelinsiirron jälkeen

Ennen

INSERT INTO wp_posts (post_title) VALUES ('Jäätelökioski – kesän uutuudet Jyväskylässä');

Jälkeen

INSERT INTO wp_posts (post_title) VALUES ('Jäätelökioski – kesän uutuudet Jyväskylässä');

Mistä se johtuu

WordPress tallentaa tekstin UTF-8:na. Monet vanhemmat asennukset loivat taulunsa kuitenkin latin1-merkistöllä tai yhdistivät latin1-yhteydellä. Niin kauan kuin kirjoittaminen ja lukeminen tekevät saman virheen, kukaan ei huomaa mitään. Kun siirrytään uudelle palvelimelle, viedään tietoja phpMyAdminilla tai vaihdetaan yhteyden merkistöä, jokainen ä ja ö muuttuu yhtäkkiä kahdeksi merkiksi.

  • DB_CHARSET tiedostossa wp-config.php on latin1 tai ei vastaa tauluja.
  • Vedos vietiin latin1-merkistöllä ja tuotiin utf8mb4-merkistöllä – tai päinvastoin.
  • Lisäosa tai tuontiskripti muunsi jo rikkinäisen tekstin vielä kerran. Silloin syntyy kaksinkertaisesti koodattua tekstiä kuten ä.

Korjaa vienti

  1. Tee tietokannasta varmuuskopio ennen kuin muutat mitään.
  2. Vie vaikutuksen alaiset taulut .sql-tiedostona, esimerkiksi phpMyAdminilla tai komennolla mysqldump --default-character-set=utf8mb4.
  3. Pudota tiedosto yllä olevaan kenttään. Mojibuster korjaa vain rikkinäiset kohdat ja näyttää jokaisen muutoksen.
  4. Lataa korjattu tiedosto ja tuo se utf8mb4-merkistöllä uuteen testitietokantaan.
  5. Tarkista sivusto. Jos kaikki näyttää oikealta, tuo tiedot tuotantotietokantaan.

Vedosta ei koskaan lähetetä minnekään – sillä on merkitystä, koska siinä on yleensä käyttäjätilejä, sähköpostiosoitteita ja kommentteja. Lisää aiheesta yrityksille ja tietosuojavastaaville.

Varo sarjallistettua dataa

WordPress tallentaa osan asetuksista tauluihin wp_options ja wp_postmeta sarjallistettuina PHP-arvoina, kuten s:10:"Jäätelö";. Luku on pituus tavuina. Kun ä muuttuu takaisin merkiksi ä, luku ei enää täsmää ja WordPress hylkää arvon. Korjaa siksi ensin sisältötaulut kuten wp_posts, wp_comments ja wp_terms. Asetuksiin sopii paremmin WP-CLI:n wp search-replace, koska se päivittää pituudet.

Poista syy MySQL:stä

  • Vaihda taulut ja yhteys merkistöön utf8mb4 ja aseta wp-config.php-tiedostoon define('DB_CHARSET', 'utf8mb4');.
  • Jos latin1-sarake sisältää UTF-8-tavuja, älä muunna sitä suoraan – silloin se koodattaisiin vielä kerran. Tavallinen reitti kulkee binäärityypin kautta: ensin MODIFY … LONGBLOB, sitten MODIFY … LONGTEXT CHARACTER SET utf8mb4.
  • Testaa jokainen muutos ensin tietokannan kopiolla.

Usein kysyttyä

Voinko korjata koko WordPress-tietokannan kerralla?

Kyllä, suuretkin SQL-vedokset. Huomioi kuitenkin sarjallistettu data tauluissa wp_options ja wp_postmeta – WP-CLI hoitaa ne paremmin.

Muuttuvatko vedoksen oikeat merkit?

Eivät. Mojibuster korjaa vain selvästi rikkinäiset jaksot. Oikea teksti pysyy sellaisenaan.

Mitä eroa on merkistöillä utf8 ja utf8mb4?

MySQL:ssä utf8 tallentaa enintään kolmen tavun merkkejä, joten emojit katoavat. utf8mb4 on aitoa UTF-8:aa ja oikea valinta WordPressille.

Toimiiko tämä muissakin järjestelmissä kuin WordPressissä?

Kyllä. Joomlalla, Drupalilla, Magentolla tai omalla MySQL- tai MariaDB-sovelluksellasi on sama ongelma ja sama korjaus.

Lue lisää