Bir enum türü olan "SET" türündeki bir veritabanı alanıyla aynı sorunu yaşadım.
O listede olmayan bir değeri eklemeye çalıştım.
Eklemeye çalıştığım değer 256 ondalık değerine sahipti, ancak enum listesinin yalnızca 8 değeri vardı.
1: 1 -> A
2: 2 -> B
3: 4 -> C
4: 8 -> D
5: 16 -> E
6: 32 -> F
7: 64 -> G
8: 128 -> H
Bu yüzden alana ek değer eklemem gerekiyordu.
Bu belge girişini okumak sorunu anlamama yardımcı oldu.
MySQL, SET değerlerini sayısal olarak depolar, ilk set üyesine karşılık gelen depolanmış değerin düşük sıralı biti. Sayısal bağlamda bir SET değeri alırsanız, alınan değerin sütun değerini oluşturan küme üyelerine karşılık gelen bit kümesi vardır. Örneğin, aşağıdaki gibi bir SET sütunundan sayısal değerler alabilirsiniz:
mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a
Bir sayı bir SET sütununda saklanırsa, sayının ikili gösteriminde ayarlanan bitler, sütun değerindeki küme üyelerini belirler. SET ('a', 'b', 'c', 'd') olarak belirtilen bir sütun için, üyeler aşağıdaki ondalık ve ikili değerlere sahiptir.
SET Member Decimal Value Binary Value
'a' 1 0001
'b' 2 0010
'c' 4 0100
'd' 8 1000
Bu sütuna 9 değerini atarsanız, yani ikili olarak 1001, böylece birinci ve dördüncü SET değeri üyeleri "a" ve "d" seçilir ve sonuçta elde edilen değer "a, d" olur.