0

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を返しますが、私の列はゼロではありません

4

1 に答える 1

2

varbinary()MySQL は、フィールド全体に対するビット演算をサポートしていません。

マニュアルから:

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

でそれらを抽出することにより、一度に1バイトで操作を実行できる場合がありsubstr()concatその結果、最初に目的のバイトをラップした残りのバイトが得られます。

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

明らかにこれはうまくスケーリングしません...

于 2011-08-11T06:23:37.707 に答える