Verwenden Sie den Zeichensatz utf8mb4 und die Kollation utf8mb4_unicode_ci in MySQL und ändern Sie diese über phpMyAdmin oder ALTER‑Befehle, denken Sie auch an SET NAMES für die Verbindung.
Charset (tegnsæt) bestemmer hvilke tegn databasen kan gemme, og collation bestemmer hvordan tegnene sammenlignes og sorteres. Forkert charset er den hyppigste årsag til at danske bogstaver (æ, ø, å) eller emojis vises som spørgsmålstegn eller mojibake (f.eks. æ i stedet for æ).
Verwende utf8mb4 als Zeichensatz und utf8mb4_unicode_ci als Kollation. utf8mb4 unterstützt alle Unicode‑Zeichen, einschließlich Emojis.
Standard für die gesamte Datenbank ändern (gilt nur für neue Tabellen):
utf8mb4_unicode_ci im Dropdown-Menü aus.Eine bestehende Tabelle ändern (einschließlich aller ihrer Spalten):
Datenbankstandard ändern:
ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Eine Tabelle und alle ihre Spalten ändern:
ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
In phpMyAdmin kannst du den Zeichensatz pro Spalte ändern: wähle die Tabelle, klicke Struktur, klicke Ändern neben der Spalte und wähle die neue Kollation in der Spaltendefinition.
ALTER-Befehle automatisch generieren:
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';
Führe das Ergebnis in phpMyAdmin im Reiter SQL oder über die Kommandozeile aus.
Der Datenbank‑Zeichensatz und der Verbindungs‑Zeichensatz sind zwei verschiedene Dinge. Selbst wenn deine Tabellen korrekt auf utf8mb4 eingestellt sind, können Zeichen während der Übertragung beschädigt werden, wenn die Verbindung zwischen Anwendung und MySQL einen anderen Zeichensatz verwendet.
SET NAMES utf8mb4 setzt drei Session‑Variablen auf einmal:
character_set_client — was der Server vom Client erwartet zu erhaltencharacter_set_connection — was der Server intern während der Abfrageverarbeitung verwendetcharacter_set_results — was der Server zurück an den Client sendetSET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
Beste Praxis: Verwende die eingebaute Zeichensatz‑Option des Treibers anstelle von SET NAMES manuell zu senden. Das stellt sicher, dass auch Funktionen wie mysqli_real_escape_string() und PDO::quote() den richtigen Zeichensatz verwenden – sonst könntest du in seltenen Fällen eine SQL‑Injection ermöglichen.
Artikel aus der Support-Kategorie: MySQL