Használj charset utf8mb4 és collation utf8mb4_unicode_ci a MySQL-ben, és módosítsd őket phpMyAdminon vagy ALTER‑parancsokkal, ne felejtsd el a SET NAMES-t a kapcsolatnál.
Charset (karakterkészlet) meghatározza, hogy milyen karaktereket tud a adatbázis tárolni, és a collation azt, hogy a karaktereket hogyan hasonlítják össze és sorolják. A helytelen charset a leggyakoribb oka annak, hogy a dán betűk (æ, ø, å) vagy az emoji‑k kérdőjeles karakterként vagy mojibake‑ként jelennek meg (például æ a æ helyett).
Használja a utf8mb4 karakterkészletet és a utf8mb4_unicode_ci collation‑t. Az utf8mb4 támogat minden Unicode‑karaktert, beleértve az emoji‑kat.
Alapértelmezés módosítása az egész adatbázisra (csak az új táblákra vonatkozik):
utf8mb4_unicode_ci-t a legördülő menüből.Létező tábla módosítása (az összes oszlopával együtt):
Módosítsa az adatbázis alapértelmezését:
ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Módosítsa egy tábla és az összes oszlop collation‑ját:
ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
A phpMyAdmin‑ban a charset‑et oszloponként is módosíthatja: válassza ki a táblát, kattintson a Struktur fülre, kattintson a Skift gombra az oszlop mellett, és válassza ki az új sortolást az oszlopdefiníciónál.
Generálja az ALTER parancsokat automatikusan:
SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mindatabase' AND TABLE_TYPE = 'BASE TABLE';
Futtassa az eredményt a phpMyAdmin SQL fülén vagy a parancssorban.
Az adatbázis charset és a kapcsolat charset két külön dolog. Még ha a táblái helyesen utf8mb4‑re vannak beállítva, a karakterek megsérülhetnek az átvitel közben, ha az alkalmazás és a MySQL közötti kapcsolat más charset‑et használ.
SET NAMES utf8mb4 egyszerre három session‑változót állít be:
character_set_client — amit a szerver elvár a kliens részérőlcharacter_set_connection — amit a szerver belsőleg használ a lekérdezés feldolgozása soráncharacter_set_results — amit a szerver visszaküld a kliensnekSET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Jobb gyakorlat: használja a driver beépített charset‑opcióját a SET NAMES manuális küldése helyett. Ez biztosítja, hogy a mysqli_real_escape_string() és a PDO::quote() függvények is a megfelelő charset-et használják — ellenkező esetben ritkán SQL‑injekcióra nyílik lehetőség.
Cikk a támogatási kategóriából: MySQL