MySQLのビット演算でフラグ情報をビットで持つなど


↑適当におえかき機能で書きました。


同僚とMySQLのビット演算でフラグ情報持てるんじゃないか?
という話になり実際にやってみた。

以下のSQLでテーブル作成&初期データINSERT

CREATE TABLE hoge(id int);
INSERT INTO hoge VALUES(conv(100,2,10)); -- 10進数の4をINSERT
INSERT INTO hoge VALUES(conv(111,2,10)); -- 10進数の7をINSERT
INSERT INTO hoge VALUES(conv(001,2,10)); -- 10進数の1をINSERT

以下のSQL論理積演算をして2進数の100でヒットするものを返す。
この場合4と7がヒットする。

SELECT id FROM hoge WHERE id & conv(100,2,10);
+------+
| id   |
+------+
|    4 |
|    7 |
+------+
2 rows in set (0.00 sec)

これで1カラムで複数の状態を管理できるんじゃなかろうか。
多分やらないけど。

詳細はMySQLのマニュアルのビット関数を参照のこと。