Ékezetes betűk javítása MySQL-ben és phpMyAdminban

A phpMyAdmin, az SQL-mentés vagy az alkalmazásod Ĺ‘ vagy Ă© jelet mutat ő és é helyett? Általában a tábla, a kapcsolat és az import karakterkészlete nem egyezik. A Mojibuster a böngésződben javítja az exportot – utána a MySQL-t tartósan helyesen állíthatod be.

Szöveggel és fájlokkal is működik:

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

Például Excel-exportok, adatbázis-mentések, feliratok vagy weboldalak forráskódja.

Javítás

  1. Húzd ide a fájlt, vagy illeszd be a szöveget
  2. A javítás automatikusan megtörténik
  3. Másold ki vagy töltsd le
vagy egyszerűen húzd ide a fájlt

Három hely, ahol a MySQL-nek kódolás kell

  • Oszlop vagy tábla: a karakterkészlet, amelyben az adatok tárolódnak, például utf8mb4 vagy latin1.
  • Kapcsolat: a karakterkészlet, amelyben a kliens és a szerver beszélget – SET NAMES utf8mb4 paranccsal vagy a kapcsolat beállításaiban adható meg.
  • Fájl: a kódolás, amellyel az importot olvasod vagy az exportot írod – a phpMyAdminban a Fájl karakterkészlete mezőben (angol felületen: Character set of the file).

Ha a három nem egyezik, a karakterek elromlanak. A leggyakoribb eset: UTF-8 szöveg latin1 kapcsolaton át került egy latin1 oszlopba. Az alkalmazásban minden jónak látszik, a phpMyAdmin és az export viszont Ă©-szerű hibákat mutat.

Egy sor egy phpMyAdmin CSV-exportból

Előtte

"1","Tóth Béla","Kossuth Lajos utca 12.","Győr"

Utána

"1","Tóth Béla","Kossuth Lajos utca 12.","Győr"

A karakterkészletek ellenőrzése

  • A SHOW VARIABLES LIKE 'character_set%'; megmutatja a szerver és a kapcsolat beállításait.
  • A SHOW CREATE TABLE ugyfelek; kiírja a tábla és oszlopai karakterkészletét.
  • A SELECT nev, HEX(nev) FROM ugyfelek LIMIT 5; a valódi bájtokat mutatja: utf8mb4 oszlopban a C3A9 egy é, a C383C2A9 viszont már elromlott Ă©.

Export vagy mentés javítása

  1. Exportáld a táblát a phpMyAdminban SQL-ként vagy CSV-ként – vagy a mysqldump --default-character-set=utf8mb4 paranccsal.
  2. Húzd a fájlt a fenti mezőbe. A Mojibuster csak a hibás helyeket javítja, a helyes karakterek változatlanok maradnak.
  3. Nézd át a javított helyeket a Mi változott? résznél, majd töltsd le a fájlt.
  4. Importáld egy utf8mb4 táblába, és az import párbeszédablakban válaszd az utf-8 karakterkészletet.
  5. Előbb másolaton próbáld ki, mielőtt lecserélnéd az éles táblát.

Az export soha nem hagyja el a gépedet – ami ügyféladatoknál fontos. Ha Windows-1250 kódolású fájlod van, a Windows-1250 UTF-8-ra alakítása oldal segít.

Az ok megszüntetése

  • Új táblákat DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_hungarian_ci beállítással hozz létre – ez a magyar ábécé szerinti rendezést is adja.
  • Állítsd az alkalmazás kapcsolatát utf8mb4-re, PHP-ban például a PDO DSN-ben charset=utf8mb4 megadásával.
  • Ha UTF-8 bájtok vannak egy latin1 oszlopban, ne használd közvetlenül a CONVERT TO parancsot – az másodszor is kódolja őket, és kétszeresen kódolt szöveg lesz belőle. A biztonságos út bináris típuson át vezet: előbb MODIFY nev VARBINARY(255), aztán MODIFY nev VARCHAR(255) CHARACTER SET utf8mb4. A jelenségről a mi az a mojibake oldalon olvashatsz.
  • Ha a MySQL ? jellel helyettesíti a karaktereket, az oszlop vagy a kapcsolat nem tudja ábrázolni őket. Ami már így tárolódott, elveszett.

Gyakori kérdések

Miért látszik minden jól az alkalmazásomban, a phpMyAdminban pedig nem?

Mert az alkalmazás és az adatbázis kétszer ugyanazt a hibát követi el: az alkalmazás UTF-8-at ír latin1 kapcsolaton át, és ugyanígy olvassa vissza. A phpMyAdmin helyesen csatlakozik, ezért azt mutatja, ami valóban tárolva van.

Melyik collationt használjam?

Magyar szövegekhez a utf8mb4_hungarian_ci a legjobb, mert a magyar ábécé szerint rendez (ö, ő, ü, ű külön betűk). Általános célra az utf8mb4_unicode_ci is megfelel. A karakterkészlet, az utf8mb4 fontosabb – nem az utf8, amely a MySQL-ben nem tud emojit tárolni.

MariaDB-vel is működik?

Igen. A MariaDB a karakterkészleteket a MySQL-lel azonosan kezeli, és a parancsok is ugyanazok.

Mekkora lehet a mentés?

Fájlonként legfeljebb 100 MB. Nagyobb adatbázist táblánként exportálj.

További útmutatók