ENUM
- und SET
-Spalten
stellen eine effiziente Möglickeit dar, Spalten zu
definieren, die nur eine festgelegte Wertemenge aufnehmen
können. Siehe auch Abschnitt 11.4.4, „Der Spaltentyp ENUM
“, und
Abschnitt 11.4.5, „Der Spaltentyp SET
“. Allerdings ermöglichen
ENUM
- und SET
-Spalten
vor MySQL 5.0.2 keine echten Constraints bei der Eingabe
ungültiger Daten:
ENUM
-Spalten haben immer einen
Vorgabewert. Wenn Sie keinen Vorgabewert angeben, dann ist
er NULL
für Spalten, die
NULL
unterstützen, andernfalls der
erste Aufzählungswert in der Spaltendefinition.
Fügen Sie einen falschen Wert in eine
ENUM
-Spalte ein oder erzwingen einen
Wert in einer ENUM
-Spalte mithilfe von
IGNORE
, dann wird dieser auf den
reservierten Aufzählungswert 0
gesetzt, der als Leer-String im String-Kontext angezeigt
wird.
Wenn Sie einen falschen Wert in eine
SET
-Spalte einfügen, wird dieser
falsche Wert ignoriert. Kann die Spalte beispielsweise die
Werte 'a'
,
'b'
und
'c'
enthalten, dann würde
der Versuch, 'a,x,b,y'
zuzuweisen, den Wert 'a,b'
zur Folge haben.
Ab MySQL 5.0.2 können Sie den Server so konfigurieren, dass
er den strikten SQL-Modus verwendet. Siehe auch
Abschnitt 5.2.5, „Der SQL-Modus des Servers“. Ist der strikte Modus
aktiviert, dann fungiert die Definition einer
ENUM
- oder SET
-Spalte
als Beschränkung für Werte, die in die Spalte eingegeben
werden. Bei Werten, die die folgenden Bedingungen nicht
erfüllen, tritt ein Fehler auf:
Ein ENUM
-Wert muss zu der Wertemenge
gehören, die in der Spaltendefinition aufgelistet ist,
oder ein internes numerisches Äquivalent eines Werts in
der Wertemenge sein. Der Wert darf nicht der Fehlerwert
(also 0 oder der Leer-String) sein. Bei einer Spalte, die
als
ENUM('a','b','c')
definiert ist, sind Werte wie etwa
''
,
'd'
oder
'ax'
unzulässig und werden
abgewiesen.
Ein SET
-Wert muss der Leer-String oder
ein Wert sein, der nur aus den in der Spaltendefinition
aufgeführten Werten besteht, die durch Kommata getrennt
sind. Bei einer Spalte, die als
SET('a','b','c')
definiert ist, sind Werte wie etwa
'd'
oder
'a,b,c,d'
unzulässig und
werden abgewiesen.
Fehler aufgrund ungültiger Werte können im strikten Modus
unterdrückt werden, indem Sie INSERT
IGNORE
bzw. UPDATE IGNORE
verwenden. In diesem Fall wird statt eines Fehlers eine
Warnung erzeugt. Bei ENUM
wird der Wert als
Fehlermitglied (0
) eingefügt. Bei
SET
wird der Wert wie vorgegeben
eingefügt, sofern nicht vorhandene ungültige Teil-Strings
gelöscht werden. So führt etwa
'a,x,b,y'
zum Wert
'a,b'
.
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.