Charset och collation på en MySQL-database
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 æ).
Rekommenderade värden
Använd utf8mb4 som charset och utf8mb4_unicode_ci som collation. utf8mb4 stöder alla Unicode‑tecken inklusive emojis.
Metod 1: phpMyAdmin
Ändra standard för hela databasen (gäller endast nya tabeller):
- Logga in på phpMyAdmin och välj databasen i vänster sida.
- Klicka på fliken Operationer.
- Hitta sektionen Sortering (Collation).
- Välj
utf8mb4_unicode_cii rullgardinsmenyn. - Klicka Utför.
Ändra en befintlig tabell (inklusive alla dess kolumner):
- Välj tabellen i vänster sida.
- Klicka på fliken Operationer.
- Under Tabellalternativ väljs ny sortering.
- Markera Ändra också sortering för alla kolumner.
- Klicka Utför.
Metod 2: SQL
Ä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.
Konvertera alla tabeller på en gång
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.
Anslutningens charset (SET NAMES)
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 klienten
SET 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