2011-06-27 5 views
1

私はbinary(100)を持っていて、そのバイトの1つだけをビット単位でORしたいと思います。バイナリ(100)にビット単位でORする方法はありますか?

これはどのように考えられるでしょうか?

また、binary(100)のバイトに値を保存するにはどうすればよいですか?

+0

@Alnitak:trueの場合、関数の制限は64ビットです。しかし、何もあなたが大きなフィールドで必要なバイト/ビットで取得するために文字列操作/キャストを行うことはできないと言います。 –

+0

@Nerfino何を保管しようとしていますか?あなたのデータは本当に連続した100バイトでなければなりませんか?(13バイトの8バイトフィールドはどうでしょうか?)バイナリフィールドの "フィーチャー" – Alnitak

+0

スペーストリミング機能は? – Nerfino

答えて

2

まず、BINARYが実際に適切なフィールドタイプであるかどうかを検討します。 BLOBと比較すると、末尾のスペースを取り除くための潜在的に厄介な「機能」があります。 BINARYは実際には大文字小文字を区別しないバイナリテキスト文字列になるように設計されており、任意のバイナリデータの塊ではありません。

ブロブを使用する場合は、ASCII()と組み合わせたSUBSTRING()演算子を使用して、必要なバイトだけを抽出し、次に|ビット演算子を使用する必要があります。

はあなたのようなものを使用する必要があると思い番目のバイトで何かを設定するには、次の64ビット(すなわち BIGINT)の12.5多くとしてあなたの100のバイトを治療することであるかもしれない

UPDATE TABLE SET col = CONCAT(
    SUBSTR(col, 1, 1), 
    CHAR(ASCII(SUBSTR(col, 2, 1) | 0x80)), 
    SUBSTR(col, 3) 
) 

A、おそらく簡単な解決策を、そして個々の単語に対して直接ビット単位の操作を使用します。

関連する問題