Если единственная проблема заключается в том, что вы не можете работать с длинными шестнадцатеричными строками, вы можете реализовать свой SP для этого.
DELIMITER $$
CREATE FUNCTION `bfunc`(
`op` VARCHAR(3),
`v1` VARCHAR(26) CHARSET latin1,
`v2` VARCHAR(26) CHARSET latin1
)
RETURNS varchar(26) CHARSET latin1
DETERMINISTIC
BEGIN
SET @r = '';
SET @r1 = REVERSE(TRIM(LEADING '0x' FROM v1));
SET @l1 = LENGTH(@r1);
SET @r2 = REVERSE(TRIM(LEADING '0x' FROM v2));
SET @l2 = LENGTH(@r2);
SET @l = IF(@l1 > @l2, @l1, @l2);
SET @i = 1;
WHILE @i < @l DO
SET @c1 = SUBSTR(@r1, @i, 1);
SET @c2 = SUBSTR(@r2, @i, 1);
SET @b1 = CONV(IF(@c1 = '', 0, @c1), 16, 10);
SET @b2 = CONV(IF(@c2 = '', 0, @c2), 16, 10);
SET @b = '';
CASE op
WHEN 'AND' THEN SET @b = @b1 & @b2;
WHEN 'OR' THEN SET @b = @b1 | @b2;
WHEN 'XOR' THEN SET @b = @b1 ^ @b2;
END CASE;
SET @r = CONCAT(@r, HEX(@b));
SET @i = @i + 1;
END WHILE;
RETURN REVERSE(@r);
END
$$
DELIMITER ;
SELECT bfunc('AND', '0x123456000000000000000000', '0x00FF00000000000000000000')
=> 03400000000000000000000
Конечно, для производстваокружение, вам нужно будет оптимизировать его и выполнять побитовую математику не на основе «на символ», а, например, на «8 символов»