列挙型である「SET」型のデータベースフィールドでも同じ問題が発生しました。
そのリストにない値を追加しようとしました。
追加しようとした値の10進値は256でしたが、列挙型リストには8つの値しかありませんでした。
1: 1 -> A
2: 2 -> B
3: 4 -> C
4: 8 -> D
5: 16 -> E
6: 32 -> F
7: 64 -> G
8: 128 -> H
そのため、フィールドに値を追加する必要がありました。
このドキュメントエントリを読むと、問題を理解するのに役立ちました。
MySQLはSET値を数値で格納し、格納された値の下位ビットは最初のセットメンバーに対応します。数値コンテキストでSET値を取得する場合、取得される値には、列値を構成するセットメンバーに対応するビットセットが含まれます。たとえば、次のようにSET列から数値を取得できます。
mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a
数値がSET列に格納されている場合、数値の2進表現で設定されたビットによって、列値の設定メンバーが決まります。SET( 'a'、 'b'、 'c'、 'd')として指定された列の場合、メンバーには次の10進値と2進値があります。
SET Member Decimal Value Binary Value
'a' 1 0001
'b' 2 0010
'c' 4 0100
'd' 8 1000
この列に値9、つまり2進数で1001を割り当てると、最初と4番目のSET値メンバー「a」と「d」が選択され、結果の値は「a、d」になります。