5

ユーザー レコードのフラグを 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 のみ?)。

速度に関しては、現在問題なく動作していますが、後でユーザーベースが成長したときに確認する必要があります.

とにかく、ご意見ありがとうございます。もちろん、他のアイデアも歓迎します。

4

0 に答える 0