Simply.com is available in english

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):

  1. Jelentkezzen be a phpMyAdmin-ba és válassza ki az adatbázist a bal oldalon.
  2. Kattintson az Operationer fülre.
  3. Keresse meg a Sortering (Collation) szekciót.
  4. Válassza ki a utf8mb4_unicode_ci-t a legördülő menüből.
  5. Kattintson a Udfør gombra.

Létező tábla módosítása (az összes oszlopával együtt):

  1. Válassza ki a táblát a bal oldalon.
  2. Kattintson az Operationer fülre.
  3. Az Tabelvalgmuligheder alatt válassza ki az új sortolást.
  4. Jelölje be a Skift også sortering for alle kolonner lehetőséget.
  5. 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ől
  • character_set_connection — amit a szerver belsőleg használ a lekérdezés feldolgozása során
  • character_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

Egyéb releváns cikkek