Verschiedene Systemvariablen zu Zeichensätzen und Sortierfolgen sind spezifisch für die Interaktion eines Clients mit dem Server. Einige dieser Variablen wurden bereits in früheren Abschnitten erwähnt:
          Die Werte für Zeichensatz und Sortierfolge können den
          Systemvariablen character_set_server und
          collation_server entnommen werden.
        
          Die Werte für Zeichensatz und Sortierfolge der
          Standarddatenbank können den Systemvariablen
          character_set_database und
          collation_database entnommen werden.
        
Weitere Systemvariablen zu Zeichensätzen und Sortierfolgen betreffen die Handhabung der Daten einer Verbindung zwischen einem Client und dem Server. Jeder Client hat verbindungsspezifische Systemvariablen für Zeichensatz und Sortierfolge.
Sehen wir uns doch einmal an, was eine „Verbindung“ ist: Sie stellen eine solche her, wenn Sie sich mit dem Server verbinden. Der Client sendet SQL-Anweisungen wie etwa Abfragen über die Verbindung an den Server. Der Server beantwortet diese, indem er beispielsweise Ergebnismengen über die Verbindung an den Client zurückschickt. Dies wirft eine Reihe von Fragen zum Umgang mit Zeichensatz und Sortierfolge bei Clientverbindungen auf, die sich aber alle auf der Basis von Systemvariablen beantworten lassen:
Welchen Zeichensatz verwendet eine Anweisung, wenn sie den Client verlässt?
          Der Server entnimmt der Systemvariablen
          character_set_client den Zeichensatz, in
          dem sich vom Client gesendete Anweisungen befinden.
        
In welchen Zeichensatz sollte der Server eine Anweisung übersetzen, nachdem er sie erhalten hat?
          Hierzu verwendet der Server die Systemvariablen
          character_set_connection und
          collation_connection. Er wandelt die
          Anweisungen, die vom Client gesendet wurden, aus
          character_set_client in
          character_set_connection um (ausgenommen
          hiervon sind String-Literale, die eine Einführung wie
          _latin1 oder _utf8
          aufweisen). collation_connection ist
          wichtig für Vergleiche literaler Strings. Für Vergleiche von
          Strings mit Spaltenwerten ist
          collation_connection hingegen unerheblich,
          da Spalten eine eigene Sortierfolge haben, die in diesem Fall
          Vorrang hat.
        
In welchen Zeichensatz soll der Server übersetzen, bevor er Ergebnismengen oder Fehlermeldungen an den Client zurückschickt?
          Die Systemvariable character_set_results
          gibt den Zeichensatz an, in dem der Server Abfrageergebnisse
          an den Client zurückgibt. Hierzu gehören Ergebnisdaten wie
          etwa Spaltenwerte und ergebnisbezogene Metadaten wie
          beispielsweise Spaltennamen.
        
Sie können die Einstellungen dieser Variablen optimieren oder einfach die Standardeinstellungen verwenden.
Es gibt zwei Anweisungen, die sich auf die Zeichensätze einer Verbindung auswirken:
SET NAMES 'charset_name' SET CHARACTER SETcharset_name
      SET NAMES gibt an, welchen Zeichensatz der
      Client zum Versand von SQL-Anweisungen an den Server verwendet.
      SET NAMES 'cp1251' bedeutet mithin: „Ab
      jetzt haben von diesem Client eingehende Nachrichten den
      Zeichensatz cp1251“. Außerdem gibt die
      Anweisung den Zeichensatz an, den der Server zum Zurücksenden der
      Ergebnisse an den Client verwenden soll. (Beispielsweise legt er
      fest, welcher Zeichensatz für Spaltenwerte benutzt werden soll,
      wenn Sie eine SELECT-Anweisung absetzen.)
    
      Eine SET NAMES
      '-Anweisung ist äquivalent
      zu den folgenden drei Anweisungen:
    x'
SET character_set_client =x; SET character_set_results =x; SET character_set_connection =x;
      Das Einstellen von character_set_connection auf
      x setzt
      collation_connection auf die
      Standardsortierfolge für x.
    
      SET CHARACTER SET ähnelt SET
      NAMES, setzt Zeichensatz und Sortierfolge der Verbindung
      aber auf die Werte der Datenbank. Eine SET CHARACTER SET
      -Anweisung ist äquivalent
      zu den folgenden drei Anweisungen:
    x
SET character_set_client =x; SET character_set_results =x; SET collation_connection = @@collation_database;
      Wenn Sie collation_connection einstellen,
      setzen Sie damit gleichzeitig
      character_set_connection auf den Zeichensatz,
      der mit dieser Sortierfolge verknüpft ist.
    
      Wenn ein Client eine Verbindung herstellt, sendet er den Namen des
      Zeichensatzes, den er verwenden will, an den Server. Der Server
      stellt auf der Basis dieses Namens die Systemvariablen
      character_set_client,
      character_set_results und
      character_set_connection ein. Im Endeffekt
      führt der Server eine SET NAMES-Operation
      unter Verwendung des Zeichensatznamens aus.
    
      Beim mysql-Client ist die Ausführung von
      SET NAMES bei jedem Systemstart nicht
      notwendig, wenn Sie einen anderen als den Standardzeichensatz
      verwenden wollen. Fügen Sie der
      mysql-Anweisungszeile oder Ihrer Optionsdatei
      einfach die Option --default-character-set hinzu.
      Die folgende Option beispielsweise setzt die drei
      Zeichensatzvariablen bei jedem Aufruf von mysql
      auf koi8r:
    
[mysql] default-character-set=koi8r
      Beispiel: Nehmen wir an, column1 sei als
      CHAR(5) CHARACTER SET latin2 definiert. Wenn
      Sie SET NAMES oder SET CHARACTER
      SET nicht angeben, dann sendet der Server bei
      SELECT column1 FROM t alle Werte für
      column1 zurück und verwendet dazu den
      Zeichensatz, den der Client bei der Verbindungsherstellung
      angegeben hat. Im Gegensatz dazu konvertiert, wenn Sie
      SET NAMES 'latin1' oder SET CHARACTER
      SET latin1 vor dem Absetzen der
      SELECT-Anweisung angeben, der Server die
      latin2-Werte in latin1,
      bevor er die Ergebnisse zurückschickt. Die Konvertierung kann
      verlustbehaftet sein, wenn Zeichen verwendet werden, die nicht in
      beiden Zeichensätzen vorhanden sind.
    
      Wenn Sie nicht wollen, dass der Server Ergebnismengen konvertiert,
      dann setzen Sie character_set_results auf
      NULL:
    
SET character_set_results = NULL;
      Hinweis: Derzeit kann UCS-2 nicht
      als Clientzeichensatz verwendet werden, d. h., SET NAMES
      'ucs2' funktioniert nicht.
    
Um die Werte der Zeichensatz- und Sortierfolgevariablen anzuzeigen, die für Ihre Verbindung gelten, verwenden Sie die folgenden Anweisungen:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
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.

