Simply.com is available in english

Charset en collatie op een MySQL-database

Gebruik charset utf8mb4 en collation utf8mb4_unicode_ci in MySQL en wijzig ze via phpMyAdmin of ALTER‑commando's, vergeet ook niet SET NAMES voor de verbinding.

Charset (tekenreeks) bepaalt welke tekens de database kan opslaan, en collation bepaalt hoe de tekens worden vergeleken en gesorteerd. Een verkeerd charset is de meest voorkomende oorzaak dat Deense letters (æ, ø, å) of emoji’s verschijnen als vraagtekens of mojibake (bijv. æ in plaats van æ).

Aanbevolen waarden

Gebruik utf8mb4 als charset en utf8mb4_unicode_ci als collation. utf8mb4 ondersteunt alle Unicode‑tekens, inclusief emoji’s.

Methode 1: phpMyAdmin

Wijzig de standaard voor de hele database (geldt alleen voor nieuwe tabellen):

  1. Log in op phpMyAdmin en selecteer de database in de linkerzijbalk.
  2. Klik op het tabblad Operaties.
  3. Zoek de sectie Sortering (Collation).
  4. Selecteer utf8mb4_unicode_ci in het dropdown‑menu.
  5. Klik Uitvoeren.

Wijzig een bestaande tabel (inclusief al zijn kolommen):

  1. Selecteer de tabel in de linkerzijbalk.
  2. Klik op het tabblad Operaties.
  3. Onder Tabelopties kies je een nieuwe sortering.
  4. Vink Wijzig ook sortering voor alle kolommen aan.
  5. Klik Uitvoeren.

Methode 2: SQL

Wijzig de standaard van de database:

ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Wijzig een tabel en al zijn kolommen:

ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

In phpMyAdmin kun je het charset per kolom wijzigen: selecteer de tabel, klik Structuur, klik Wijzigen naast de kolom, en kies een nieuwe sortering in de kolomdefinitie.

Converteer alle tabellen in één keer

Genereer de ALTER‑commando’s automatisch:

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';

Voer het resultaat uit in phpMyAdmin onder het tabblad SQL of via de commandoregel.

Charset van de verbinding (SET NAMES)

Database‑charset en verbinding‑charset zijn twee verschillende zaken. Zelfs als je tabellen correct zijn ingesteld op utf8mb4, kunnen tekens corrupt raken tijdens transport als de verbinding tussen de applicatie en MySQL een ander charset gebruikt.

SET NAMES utf8mb4 stelt drie sessie‑variabelen tegelijk in:

  • character_set_client — wat de server verwacht van de client
  • character_set_connection — wat de server intern gebruikt tijdens query‑verwerking
  • character_set_results — wat de server terugstuurt naar de client
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

Betere praktijk: gebruik de ingebouwde charset‑optie van de driver in plaats van handmatig SET NAMES te versturen. Dit zorgt ervoor dat ook functies zoals mysqli_real_escape_string() en PDO::quote() het juiste charset gebruiken — anders kun je in zeldzame gevallen openstaan voor SQL‑injectie.

Artikel uit de ondersteuningscategorie: MySQL

Andere relevante artikelen