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):
- Log in op phpMyAdmin en selecteer de database in de linkerzijbalk.
- Klik op het tabblad Operaties.
- Zoek de sectie Sortering (Collation).
- Selecteer
utf8mb4_unicode_ciin het dropdown‑menu. - Klik Uitvoeren.
Wijzig een bestaande tabel (inclusief al zijn kolommen):
- Selecteer de tabel in de linkerzijbalk.
- Klik op het tabblad Operaties.
- Onder Tabelopties kies je een nieuwe sortering.
- Vink Wijzig ook sortering voor alle kolommen aan.
- 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 clientcharacter_set_connection— wat de server intern gebruikt tijdens query‑verwerkingcharacter_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