Charset és collation egy MySQL adatbázison
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).
Ajánlott értékek
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.
1. módszer: phpMyAdmin
Alapértelmezés módosítása az egész adatbázisra (csak az új táblákra vonatkozik):
- Jelentkezzen be a phpMyAdmin-ba és válassza ki az adatbázist a bal oldalon.
- Kattintson az Operationer fülre.
- Keresse meg a Sortering (Collation) szekciót.
- Válassza ki a
utf8mb4_unicode_ci-t a legördülő menüből. - Kattintson a Udfør gombra.
Létező tábla módosítása (az összes oszlopával együtt):
- Válassza ki a táblát a bal oldalon.
- Kattintson az Operationer fülre.
- Az Tabelvalgmuligheder alatt válassza ki az új sortolást.
- Jelölje be a Skift også sortering for alle kolonner lehetőséget.
- Kattintson a Udfør gombra.
2. módszer: SQL
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.
Az összes tábla egyidejű konvertálása
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.
A kapcsolat charset-je (SET NAMES)
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 kliensnek
SET 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