Der Datentyp ENUM
ist ein String-Objekt mit
einem Wert, der aus einer Liste zulässiger Werte ausgewählt
wird, die beim Erstellen der Tabelle explizit in der
Spaltendefinition aufgelistet werden.
Als Werte kommen unter bestimmten Umständen auch der
Leer-String (''
) oder NULL
in Frage:
Wenn Sie einen ungültigen Wert (d. h. einen String, der
nicht in der Liste zulässiger Werte vorhanden ist) in eine
ENUM
-Spalte einzufügen versuchen, dann
wird stattdessen als spezieller Fehlerwert der Leer-String
eingefügt. Dieser String lässt sich von einem
„normalen“ leeren String dadurch unterscheiden,
dass er den numerischen Wert 0 hat. Weitere Informationen
hierzu folgen weiter unten.
Wenn der strikte SQL-Modus aktiviert ist, führen Versuche,
ungültige ENUM
-Werte einzufügen, zu
einer Fehlermeldung.
Wird für eine ENUM
-Spalte die
Zulässigkeit von NULL
deklariert, dann
ist der NULL
-Wert für die Spalte
erlaubt. Ferner ist in diesem Fall auch der Standardwert
NULL
. Wenn eine
ENUM
-Spalte als NOT
NULL
deklariert wird, dann wird als Vorgabe das
erste Element der Liste zulässiger Werte verwendet.
Jeder Wert in der Auflistung hat einen Index:
Werte aus der Liste zulässiger Elemente in der Spaltenspezifikation werden beginnend mit 1 nummeriert.
Der Indexwert des als Fehlerwert verwendeten Leer-Strings
ist 0. Sie können also folgende
SELECT
-Anweisung verwenden, um
Datensätze zu ermitteln, bei denen ungültige
ENUM
-Werte zugewiesen wurden:
mysql> SELECT * FROM tbl_name
WHERE enum_col
=0;
Der Indexwert des NULL
-Werts ist
NULL
.
Der Begriff „Index“ bezeichnet in diesem Kontext nur die Position innerhalb der Auflistung möglicher Werte. Es gibt keine Verbindung zu Tabellenindizes.
Eine Spalte, die als ENUM('one', 'two',
'three')
definiert ist, kann jeden der nachfolgend
angegebenen Werte annehmen. Auch die Indizes der einzelnen Werte
werden angezeigt:
Wert | Index |
NULL |
NULL |
'' |
0 |
'one' |
1 |
'two' |
2 |
'three' |
3 |
Eine Auflistung darf maximal 65.535 Elemente enthalten.
Beim Erstellen der Tabelle werden bei
ENUM
-Mitgliedswerten am Ende stehende
Leerzeichen in der Tabellendefinition automatisch entfernt.
Beim Abrufen werden Werte, die in einer
ENUM
-Spalte gespeichert sind, in der
Groß-/Kleinschreibung angezeigt, die bei der Spaltendefinition
verwendet wurde. Beachten Sie, dass
ENUM
-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.
Wenn Sie einen ENUM
-Wert in einem numerischen
Kontext abrufen, wird der Index des Spaltenwerts zurückgegeben.
So können Sie beispielsweise numerische Werte wie folgt aus
einer ENUM
-Spalte abrufen:
mysql> SELECT enum_col
+0 FROM tbl_name
;
Wenn Sie eine Zahl in einer ENUM
-Spalte
ablegen, wird diese als Index behandelt, und der mit diesem
Index verknüpfte Mitgliedswert wird in der Spalte gespeichert.
(Allerdings funktioniert dies nicht bei LOAD
DATA
, weil diese Anweisung alle Eingaben als Strings
behandelt.) Es ist nicht ratsam, eine
ENUM
-Spalte mit Auflistungswerten zu
definieren, die wie Zahlen aussehen, da dies schnell zu
Verwirrung führen kann. So hat beispielsweise die folgende
Spalte Auflistungswerte mit den String-Werten
'0'
, '1'
und
'2'
, aber die numerischen Indexwerte
1
, 2
und
3
:
numbers ENUM('0','1','2')
ENUM
-Werte werden entsprechend der
Reihenfolge sortiert, in der sie in der Spaltendefinition
aufgeführt wurden. (Anders gesagt:
ENUM
-Werte werden nach ihren Indexzahlen
sortiert.) So wird beispielsweise bei ENUM('a',
'b')
'a'
vor 'b'
einsortiert, bei ENUM('b', 'a')
hingegen wird
'b'
vor 'a'
einsortiert.
Der Leer-String wird immer vor nichtleeren Strings einsortiert,
und NULL
-Werte werden vor allen anderen
Auflistungswerten einsortiert. Um unerwünschte Ergebnisse zu
vermeiden, geben Sie die ENUM
-Liste am besten
in alphabetischer Reihenfolge an. Sie können auch mit
GROUP BY CAST(col AS CHAR)
oder
GROUP BY CONCAT(col)
sicherstellen, dass die
Spalte lexikalisch statt nach Indexnummer sortiert wird.
Wenn Sie alle möglichen Werte für eine
ENUM
-Spalte bestimmen wollen, verwenden Sie
SHOW COLUMNS FROM
und
verarbeiten die tbl_name
LIKE enum_col
ENUM
-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.