2011-08-11 4 views
0

でのvarbinary(255)と私は、MySQLのテーブルに次のフィールドがあります。ビットAND/OR mysqlの

bitmap varbinary(256) 

私はビット単位のAND、このフィールドでを実行します。私が試した:

select id, Hex(bitmap) from mytable; 
| 735 | 1D1BA8284000000000000000000000000000000000000000000000000000000000 | 
| 736 | 1D1BACA80000000000000000000000000000000000000000000000000000000000 | 

select Hex(bitmap & 0xFFFFFFFFF000000000000000000000000000000000000000000000000000000000) from mytable 

| 735 | 0                      | 
| 736 | 0                      | 

MySQLは常に0でもその後、私の列が非ゼロ

+0

これは、それを選択していないにもかかわらずIDを下部出力に表示しているので、mysqlからの直接ダンプのようには見えません。それで、あなたが書いたものとは別の質問が出ているのだろうかと思います。興味のない場合は、ANDの代わりにORを使用するとどうなりますか? –

答えて

2

MySQLは全体varbinary()フィールド上のビットごとの演算をサポートしていませんです与えます。 the manualから

MySQLはビット演算のためのBIGINT(64ビット)算術演算を使用するため、これらの演算子は、64ビットの最大範囲を有します。

あなたすなわち、その後、substr()もともと興味のバイトを包ん残りのバイトとなりconcatでそれらを抽出することにより、一度に単一バイトの操作を実行することができるかもしれない

SELECT CHAR(ASCII(SUBSTR(bitmap, 1, 1)) & 0xff || SUBSTR(bitmap, 2) 

明らかにこれはうまくスケールされません...

関連する問題