Simply.com is available in english

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

  1. Logga in på phpMyAdmin och välj databasen i vänster sida.
  2. Klicka på fliken Operationer.
  3. Hitta sektionen Sortering (Collation).
  4. Välj utf8mb4_unicode_ci i rullgardinsmenyn.
  5. Klicka Utför.

Ändra en befintlig tabell (inklusive alla dess kolumner):

  1. Välj tabellen i vänster sida.
  2. Klicka på fliken Operationer.
  3. Under Tabellalternativ väljs ny sortering.
  4. Markera Ändra också sortering för alla kolumner.
  5. 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 klienten
  • character_set_connection — vad servern använder internt under frågebehandling
  • character_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

Andra relevanta artiklar