私は効率的にMySQLのレコードのビットフラグを保存し、効率的に操作したいと思います。 SETデータ型は、最大64個のフラグが単一の数値として格納されるため、最初の願いを満たします。しかし、第二はどうですか?高速バイナリ操作でMySQLでSETデータ型を操作する方法は?
UPDATE table_name SET set_col = (set_col | 4) WHERE condition;
UPDATE table_name SET set_col = (set_col & ~4) WHERE condition;
のような厄介な解決策だけが、値にメンバーを含めたり除外したりするのを見ました。私。数値定数を使用する必要があります。これはコードをメンテナンス不能にします。次に、INTのデータ型も使用できました。 set_col
の定義が変更された場合(可能なメンバーの追加、削除、または並べ替え)には、ハードコードされた定数を持つコードが混乱します。数値的な定数ではなく、メンテナンスを容易にするだけでなく、完全なエラーを防ぐという名前の変数をアプリケーション言語で使用するようにコーダーでいくつかの規律を施すことができます。 MySQLが集合メンバの記号名を正しい数値に解決する解決策がありますか?例えば。これは動作しません:
UPDATE person SET tag=tag | 'MGR'
を役に立たない答えを食い止めるために、私は、データベースの正規化と別々メートル対nの関係テーブルについて知っている、それはここでは話題ではありません。あなたはより具体的な例が必要な場合は、ここにいます:セットの定義に
CREATE TABLE `coder` (
`name` VARCHAR(50) NOT NULL,
`languages` SET('Perl','PHP','Java','Scala') NOT NULL
)
変更「のPerl5」と「Perl6の」に「Perlを」分割するように、多分隔年思いも寄らないしかし、可能です。
これは、まだ整数演算 '列十分ではありません| 4096'と'コラム&〜128単位がはるかに高速です。 – MKaama