Använd charset utf8mb4 och collation utf8mb4_unicode_ci i MySQL och byt dem via phpMyAdmin eller ALTER‑kommandon, kom också ihåg SET NAMES för anslutningen.
Charset (teckenuppsättning) bestämmer vilka tecken databasen kan lagra, och collation bestämmer hur tecknen jämförs och sorteras. Fel charset är den vanligaste orsaken till att danska bokstäver (æ, ø, å) eller emojis visas som frågetecken eller mojibake (t.ex. æ i stället för æ).
Använd utf8mb4 som charset och utf8mb4_unicode_ci som collation. utf8mb4 stöder alla Unicode‑tecken inklusive emojis.
Ändra standard för hela databasen (gäller endast nya tabeller):
utf8mb4_unicode_ci i rullgardinsmenyn.Ändra en befintlig tabell (inklusive alla dess kolumner):
Ändra databasens standard:
ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ändra en tabell och alla dess kolumner:
ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
I phpMyAdmin kan du ändra charset per kolumn: välj tabellen, klicka Struktur, klicka Ändra bredvid kolumnen, och välj ny sortering i kolumndefinitionen.
Generera ALTER-kommandona automatiskt:
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';
Kör resultatet i phpMyAdmin under fliken SQL eller via kommandoraden.
Database-charset och anslutnings-charset är två olika saker. Även om dina tabeller är korrekt satta till utf8mb4 kan tecken bli korrupta på vägen om anslutningen mellan applikation och MySQL använder ett annat charset.
SET NAMES utf8mb4 sätter tre sessionsvariabler på en gång:
character_set_client — vad servern förväntar sig att få från klientencharacter_set_connection — vad servern använder internt under frågebehandlingcharacter_set_results — vad servern skickar tillbaka till klientenSET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Bäst praxis: använd drivrutinens inbyggda charset‑alternativ istället för att skicka SET NAMES manuellt. Det säkerställer att även funktioner som mysqli_real_escape_string() och PDO::quote() använder rätt charset — annars kan du i sällsynta fall öppna för SQL‑injektion.
Artikel från supportkategorin: MySQL