Bruk charset utf8mb4 og collation utf8mb4_unicode_ci i MySQL og endre dem via phpMyAdmin eller ALTER‑kommandoer, husk også SET NAMES for forbindelsen.
Charset (tegnsett) bestemmer hvilke tegn databasen kan lagre, og collation bestemmer hvordan tegnene sammenlignes og sorteres. Feil charset er den hyppigste årsaken til at norske bokstaver (æ, ø, å) eller emojis vises som spørsmålstegn eller mojibake (f.eks. æ i stedet for æ).
Bruk utf8mb4 som charset og utf8mb4_unicode_ci som collation. utf8mb4 støtter alle Unicode-tegn inkludert emojis.
Endre standard for hele databasen (gjelder kun nye tabeller):
utf8mb4_unicode_ci i rullegardinmenyen.Endre en eksisterende tabell (inkludert alle dens kolonner):
Endre databasens standard:
ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Endre en tabell og alle dens kolonner:
ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
I phpMyAdmin kan du endre charset per kolonne: velg tabellen, klikk Struktur, klikk Endre ved siden av kolonnen, og velg ny sortering i kolonnedefinisjonen.
Generer ALTER‑kommandoene automatisk:
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';
Kjør resultatet i phpMyAdmin under fanen SQL eller via kommandolinjen.
Database-charset og tilkoblings-charset er to forskjellige ting. Selv om tabellene dine er korrekt satt til utf8mb4, kan tegn bli korrupte i transitt hvis tilkoblingen mellom applikasjon og MySQL bruker et annet charset.
SET NAMES utf8mb4 setter tre sesjonsvariabler på én gang:
character_set_client — hva serveren forventer å motta fra klientencharacter_set_connection — hva serveren bruker internt under spørringsbehandlingcharacter_set_results — hva serveren sender tilbake til klientenSET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Bedre praksis: bruk driverens innebygde charset‑alternativ i stedet for å sende SET NAMES manuelt. Det sikrer at også funksjoner som mysqli_real_escape_string() og PDO::quote() bruker riktig charset — ellers kan du i sjeldne tilfeller åpne for SQL‑injection.
Artikkel fra støttekategorien: MySQL