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 æ).
Gebruik utf8mb4 als charset en utf8mb4_unicode_ci als collation. utf8mb4 ondersteunt alle Unicode‑tekens, inclusief emoji’s.
Wijzig de standaard voor de hele database (geldt alleen voor nieuwe tabellen):
utf8mb4_unicode_ci in het dropdown‑menu.Wijzig een bestaande tabel (inclusief al zijn kolommen):
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.
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.
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 clientSET 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