ユーザー レコードのフラグを MySQL テーブルに保存する必要があります (InnoDB を使用しています)。
---------------------------
| UserId | Mask |
| -------------------------
| 1 | 00000...001 |
| 2 | 00000...010 |
---------------------------
フラグの数が 64 を超えているため、BIGINT または BIT 型を使用して値を格納することはできません。
各ユーザーが複数のプロファイルを持つことができ、それぞれにフラグのセットがあり、すぐに大きくなりすぎるため、多対多の関連付けテーブルを使用したくありません。
したがって、私の質問は、これらのフラグを VARCHAR、BLOB、または TEXT タイプの列に格納し、それらに対してビット単位の操作を行うことは可能ですか? はいの場合、どのように?
今のところ、必要な操作は 1 つだけです。X ビットが 1 に設定されたマスク A が与えられた場合、ユーザーは少なくともそれらの X ビットが 1 に設定されています。
ありがとう!
編集
これを読んでいる人には、解決策を見つけました(少なくとも私にとっては)。マスク フィールドに VARCHAR を使用しています。特定のマスクを検索するときは、次のクエリを使用します。
select * from my_table where mask like '__1__1'
3 番目と最後のビットがオンに設定されているすべてのレコードが返されます。「_」記号は、「任意の 1 文字」の SQL プレースホルダーです (おそらく mySQL のみ?)。
速度に関しては、現在問題なく動作していますが、後でユーザーベースが成長したときに確認する必要があります.
とにかく、ご意見ありがとうございます。もちろん、他のアイデアも歓迎します。