Simply.com is available in english

Charset und Collation einer MySQL-Datenbank

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

Empfohlene Werte

Verwende utf8mb4 als Zeichensatz und utf8mb4_unicode_ci als Kollation. utf8mb4 unterstützt alle Unicode‑Zeichen, einschließlich Emojis.

Methode 1: phpMyAdmin

Standard für die gesamte Datenbank ändern (gilt nur für neue Tabellen):

  1. Melde dich bei phpMyAdmin an und wähle die Datenbank in der linken Spalte aus.
  2. Klicke auf den Reiter Operationen.
  3. Finde den Abschnitt Sortierung (Collation).
  4. Wähle utf8mb4_unicode_ci im Dropdown-Menü aus.
  5. Klicke Ausführen.

Eine bestehende Tabelle ändern (einschließlich aller ihrer Spalten):

  1. Wähle die Tabelle in der linken Spalte aus.
  2. Klicke auf den Reiter Operationen.
  3. Unter Tabellenoptionen wird die neue Kollation ausgewählt.
  4. Setze ein Häkchen bei Auch die Kollation für alle Spalten ändern.
  5. Klicke Ausführen.

Methode 2: SQL

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.

Alle Tabellen auf einmal konvertieren

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.

Zeichensatz der Verbindung (SET NAMES)

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 erhalten
  • character_set_connection — was der Server intern während der Abfrageverarbeitung verwendet
  • character_set_results — was der Server zurück an den Client sendet
SET 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

Andere relevante Artikel