Metadaten sind „Daten über
      Daten“. Alle Daten, die die Datenbank
      beschreiben – nicht aber solche, die in der
      Datenbank enthalten sind – bezeichnet man
      als Metadaten. Insofern sind etwa Spalten-, Datenbank-, Benutzer-
      und Versionsnamen sowie die meisten String-Ergebnisse aus
      SHOW-Anweisungen Metadaten. Dies gilt auch für
      die Inhalte von Tabellen in INFORMATION_SCHEMA,
      weil diese Tabellen per Definition Informationen zu
      Datenbankobjekten enthalten.
    
Die Darstellung von Metadaten muss den folgenden Anforderungen genügen:
          Alle Metadaten müssen im selben Zeichensatz stehen.
          Andernfalls würden weder die SHOW-Befehle
          noch SELECT-Anweisungen für Tabellen im
          INFORMATION_SCHEMA korrekt arbeiten, weil
          verschiedene Datensätze in derselben Spalte der Ergebnisse
          für diese Operationen in verschiedenen Zeichensätzen stehen
          würden.
        
Metadaten müssen alle Zeichen in allen Sprachen enthalten. Andernfalls könnten Benutzer unter Umständen Spalten und Tabellen nicht in ihrer eigenen Sprache benennen.
Um beide Bedingungen zu erfüllen, speichert MySQL Metadaten in einem Unicode-Zeichensatz (nämlich UTF-8). Dies sorgt keinesfalls für Probleme, wenn Sie keine Buchstaben mit Akzent oder nichtlateinische Zeichen verwenden. Andernfalls aber sollten Sie berücksichtigen, dass Metadaten in UTF-8 stehen.
      Die Anforderungen an Metadaten sehen vor, dass die Rückgabewerte
      der Funktionen USER(),
      CURRENT_USER(), DATABASE()
      und VERSION() standardmäßig den
      UTF-8-Zeichensatz verwenden; dies gilt auch für Synonyme wie
      SESSION_USER() und
      SYSTEM_USER().
    
      Der Server setzt die Systemvariable
      character_set_system auf den Namen des
      Metadaten-Zeichensatzes:
    
mysql> SHOW VARIABLES LIKE 'character_set_system';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_system | utf8  |
+----------------------+-------+
      Die Speicherung von Metadaten unter Verwendung von Unicode hat
      nicht zur Folge, dass der Server
      Spaltenüberschriften und die Ergebnisse von
      DESCRIBE-Funktionen standardmäßig im durch
      character_set_system angegebenen Zeichensatz
      zurückgibt. Wenn Sie SELECT column1 FROM t
      verwenden, wird der Name column1 selbst vom
      Server an den Client in dem Zeichensatz zurückgegeben, der vom
      Wert der Systemvariablen character_set_results
      angegeben wird (deren Standartwert ist latin1).
      Wenn Sie wollen, dass der Server Metadatenergebnisse in einem
      anderen Zeichensatz zurückgibt, erzwingen Sie mit der
      SET NAMES-Anweisung eine
      Zeichensatzkonvertierung am Server. SET NAMES
      stellt character_set_results und andere
      zugehörige Systemvariablen um. (Siehe auch
      Abschnitt 10.4, „Verbindungszeichensatz und -sortierfolge“.) Alternativ kann ein
      Clientprogramm die Konvertierung nach Empfang des Ergebnisses vom
      Server vornehmen. Die Konvertierung durch den Client ist
      effizienter, aber diese Option ist nicht immer verfügbar.
    
      Wenn character_set_results den Wert
      NULL hat, wird keine Konvertierung
      durchgeführt und der Server gibt Metadaten im ursprünglichen
      (d. h. dem durch character_set_system
      angegebenen) Zeichensatz zurück.
    
Fehlermeldungen, die der Server an den Client zurückgibt, werden wie Metadaten automatisch in den Zeichensatz des Clients konvertiert.
      Keine Sorge, wenn Sie (beispielsweise) die Funktion
      USER() für einen Vergleich oder eine Zuordnung
      innerhalb einer einzelnen Anweisung verwenden: MySQL führt die
      Konvertierung für Sie automatisch durch.
    
SELECT * FROM Table1 WHERE USER() = latin1_column;
      Dies funktioniert, weil der Inhalt von
      latin1_column vor dem Vergleich automatisch in
      UTF-8 konvertiert wird.
    
INSERT INTO Table1 (latin1_column) SELECT USER();
      Dies funktioniert, weil der Inhalt von USER()
      vor der Zuweisung automatisch in latin1
      konvertiert wird. Die automatische Konvertierung ist noch nicht
      vollständig implementiert, sollte aber in einer zukünftigen
      Version korrekt arbeiten.
    
Zwar ist die automatische Konvertierung nicht Bestandteil des SQL-Standards, aber das SQL-Standarddokument besagt, dass jeder Zeichensatz (hinsichtlich der unterstützten Zeichen) eine „Teilmenge“ von Unicode ist. Aufgrund des bekannten Prinzips „Was für eine übergeordnete Menge gilt, kann auch für eine Teilmenge gelten“ nehmen wir an, dass eine Sortierfolge für Unicode auch für Vergleiche mit Nicht-Unicode-Strings gelten kann.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

