Hallo,
ich habe da ein Problem mit enum-Feldern in MySQL. Wenn man ein Update auf das enum-Feld ansetzt, kann man entweder über den Schlüssel (1..n) oder über den Wert updaten.
update TEST set enum1=$key where ...
oder eben
update TEST set enum1='$wert' where ...
Das funktioniert solange richtig, wie val($wert) nicht in der Schlüsselliste enthalten ist.
Also Bsp.:
Schlüssel 1 2 3 4 5
Wert 'rot' 'gelb' 'grün '3' 'blau'
Wenn jetzt aus irgend einem Grund jemand 'grau' updaten will, dann wird das Feld auf NULL gesetzt oder es gibt einen Fehler, wenn NotNull gesetzt ist. Das ist ok so.
Wenn jemand 2 updated, dann wird der Schlüssel 2 gesetzt und damit der Wert 'gelb' indiziert. Auch ok.
Wenn jemand 7 updated, dann wird das Feld auf NULL gesetzt oder es gibt einen Fehler, wenn NotNull gesetzt ist. Auch ok so.
Wenn man nun aber '1', '2', '4' oder '5' benutzt, dann sind diese Wert ja nicht in der Werteliste enthalten und MySQL ist so freundlich[tm] und benutzt den Wert als Schlüssel. Es steht also dann hinterher ein vollkommen falscher Wert im Feld.
Weiß jemand, iwe man diese Verhalten auf Datenbankebene richtigstellen kann, also ohne vorher die Werte auszulesen und extern abzugleichen?
LG
Chris