Побитовое И / ИЛИ с varbinary (255) в MySQL - PullRequest
0 голосов
/ 11 августа 2011

У меня есть следующее поле в таблице MySQL:

bitmap  varbinary(256)

Я хочу выполнить побитовое И в этом поле. Я попробовал:

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

select Hex(bitmap & 0xFFFFFFFFF000000000000000000000000000000000000000000000000000000000) from mytable

| 735 | 0                                                                                       |
| 736 | 0                                                                                       |

Mysql всегда дает 0, даже тогда мои столбцы ненулевые

1 Ответ

2 голосов
/ 11 августа 2011

MySQL не поддерживает побитовые операции над полями varbinary().

С руководство :

MySQL использует BIGINT (64-бит)арифметика для битовых операций, поэтому максимальный диапазон этих операторов составляет 64 бита.

Вы могли бы быть в состоянии выполнять операции с одиночными байтами за раз, извлекая их с помощью substr(), а затем concat, что приводит к оставшимся байтам, которые первоначально обернулиинтересующий байт, то есть

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

очевидно, это не очень хорошо масштабируется ...

...