Simply.com is available in english

Tegnsett og sortering i en MySQL-database

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 æ).

Anbefalte verdier

Bruk utf8mb4 som charset og utf8mb4_unicode_ci som collation. utf8mb4 støtter alle Unicode-tegn inkludert emojis.

Metode 1: phpMyAdmin

Endre standard for hele databasen (gjelder kun nye tabeller):

  1. Logg inn på phpMyAdmin og velg databasen i venstre side.
  2. Klikk på fanen Operationer.
  3. Finn seksjonen Sortering (Collation).
  4. Velg utf8mb4_unicode_ci i rullegardinmenyen.
  5. Klikk Utfør.

Endre en eksisterende tabell (inkludert alle dens kolonner):

  1. Velg tabellen i venstre side.
  2. Klikk på fanen Operationer.
  3. Under Tabellalternativer velges ny sortering.
  4. Sett avkrysningsboksen i Endre også sortering for alle kolonner.
  5. Klikk Utfør.

Metode 2: SQL

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.

Konverter alle tabeller på én gang

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.

Forbindelsens charset (SET NAMES)

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 klienten
  • character_set_connection — hva serveren bruker internt under spørringsbehandling
  • character_set_results — hva serveren sender tilbake til klienten
SET 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

Andre relevante artikler