Der Datentyp SET (Menge) ist ein
        String-Objekt, das null oder mehr Werte haben kann. Alle diese
        Werte entstammen einer Liste zulässiger Werte, die beim
        Erstellen der Tabelle angegeben werden. Bei
        SET-Spaltenwerten, die mehrere Mitglieder der
        Menge umfassen, werden die Mitgliedswerte durch Kommata
        (‘,’) getrennt angegeben. Hieraus
        ergibt sich, dass SET-Mitgliedswerte
        ihrerseits keine Kommata enthalten sollten.
      
        Eine Spalte, die als SET('one', 'two') NOT
        NULL definiert ist, kann jeden der folgenden Werte
        annehmen:
      
'' 'one' 'two' 'one,two'
        Ein SET kann maximal 64 Mitgliedswerte
        umfassen.
      
        Beim Erstellen der Tabelle werden bei
        SET-Mitgliedswerten am Ende stehende
        Leerzeichen in der Tabellendefinition automatisch entfernt.
      
        Beim Abrufen werden Werte, die in einer
        SET-Spalte gespeichert sind, in der
        Groß-/Kleinschreibung angezeigt, die bei der Spaltendefinition
        verwendet wurde. Beachten Sie, dass
        SET-Spalten ein Zeichensatz und eine
        Sortierung zugewiesen werden können. Bei binären Sortierungen
        oder solchen, bei denen die Groß-/Kleinschreibung unterschieden
        wird, wird die Schreibweise beim Zuweisen von Werten zur Spalte
        berücksichtigt.
      
        MySQL speichert SET-Werte numerisch, wobei
        das niederwertige Bit des gespeicherten Werts dem ersten
        Mitgliedswert der Menge entspricht. Wenn Sie einen
        SET-Wert in einem numerischen Kontext
        abrufen, sind die Bits dieses Werts entsprechend den
        Mitgliedswerten der Menge gesetzt, die den Spaltenwert bilden.
        So können Sie beispielsweise numerische Werte wie folgt aus
        einer SET-Spalte abrufen:
      
mysql> SELECT set_col+0 FROM tbl_name;
        Wenn eine Zahl in einer SET-Spalte
        gespeichert wird, bestimmen die Bits, die in der Binärform der
        Zahl gesetzt sind, die im Spaltenwert vorhandenen Mitglieder.
        Bei einer Spalte, die als
        SET('a','b','c','d') definiert ist, haben die
        Mitglieder die folgenden Dezimal- und Binärwerte:
      
| SETMitgliedswert | Dezimalwert | Binärwert | 
| 'a' | 1 | 0001 | 
| 'b' | 2 | 0010 | 
| 'c' | 4 | 0100 | 
| 'd' | 8 | 1000 | 
        Wenn Sie dieser Spalte den Wert 9 zuweisen,
        entspricht dies dem Binärwert 1001, d. h.,
        der erste und der vierte SET-Mitgliedswert
        ('a' und 'd') werden
        ausgewählt. Das Ergebnis lautet also 'a,d'.
      
        Bei einem Wert, der mehr als ein SET-Element
        enthält, spielt es keine Rolle, in welcher Reihenfolge die
        Elemente beim Einfügen des Werts aufgeführt sind. Ebenso wenig
        ist relevant, wie häufig ein gegebenes Element in der Liste
        auftaucht. Wenn der Wert später abgerufen wird, erscheint jedes
        Element des Werts genau einmal in der Liste, und diese ist in
        der Reihenfolge sortiert, in der die Mitglieder bei Erstellung
        der Tabelle aufgeführt wurden. Nehmen wir beispielsweise einmal
        an, eine Spalte sei als SET('a','b','c','d')
        definiert:
      
mysql> CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
        Nun fügen Sie die Werte 'a,d',
        'd,a', 'a,d,d',
        'a,d,a' und 'd,a,d' ein:
      
mysql> INSERT INTO myset (col) VALUES 
-> ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0
        Beim Abrufen erscheinen alle diese Werte als
        'a,d':
      
mysql> SELECT col FROM myset;
+------+
| col  |
+------+
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
+------+
5 rows in set (0.04 sec)
        Wenn Sie eine SET-Spalte auf einen nicht
        unterstützten Wert setzen, wird dieser ignoriert, und es wird
        eine Warnung ausgegeben:
      
mysql>INSERT INTO myset (col) VALUES ('a,d,d,s');Query OK, 1 row affected, 1 warning (0.03 sec) mysql>SHOW WARNINGS;+---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1265 | Data truncated for column 'col' at row 1 | +---------+------+------------------------------------------+ 1 row in set (0.04 sec) mysql>SELECT col FROM myset;+------+ | col | +------+ | a,d | | a,d | | a,d | | a,d | | a,d | | a,d | +------+ 6 rows in set (0.01 sec)
        Wenn der strikte SQL-Modus aktiviert ist, führen Versuche,
        ungültige SET-Werte einzufügen, zu einer
        Fehlermeldung.
      
        SET-Werte werden numerisch sortiert.
        NULL-Werte werden dabei vor
        Nicht-NULL-Werten einsortiert.
      
        Meist werden Sie SET-Werte mithilfe der
        Funktion FIND_IN_SET() oder des Operators
        LIKE durchsuchen:
      
mysql>SELECT * FROMmysql>tbl_nameWHERE FIND_IN_SET('value',set_col)>0;SELECT * FROMtbl_nameWHEREset_colLIKE '%value%';
        Die erste Anweisung findet Datensätze, bei denen
        set_col den Mitgliedswert
        value enthält. Die zweite ist
        ähnlich, aber nicht identisch: Sie findet Datensätze, bei
        denen set_col
        value an beliebiger Stelle (auch als
        Teil-String eines anderen Mitglieds) enthält.
      
Die folgenden Anweisungen sind ebenfalls zulässig:
mysql>SELECT * FROMmysql>tbl_nameWHEREset_col& 1;SELECT * FROMtbl_nameWHEREset_col= 'val1,val2';
        Die erste Anweisung sucht nach Werten, die das erste Mitglied
        der Menge enthalten. Die zweite sucht nach einer exakten
        Übereinstimmung. Seien Sie bei Vergleichen des zweiten Typs
        vorsichtig. Der Vergleich von Mengenwerten mit
        '
        gibt andere Resultate zurück als der Vergleich mit
        val1,val2''.
        Sie sollten die Werte in derselben Reihenfolge angeben, in der
        sie in der Spaltendefinition aufgelistet sind.
      val2,val1'
        Wenn Sie alle möglichen Werte für eine
        SET-Spalte bestimmen wollen, verwenden Sie
        SHOW COLUMNS FROM  und
        verarbeiten die tbl_name
        LIKE set_colSET-Definition in der Spalte
        Type der Ausgabe.
      
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.

