Home > info > ビット列型の挙動

ビット列型の挙動

CREATE TABLE するときに

foo BIT VARYING(8)
と、しても、

SELECT * FROM t WHERE B'00010000' = foo & B'00010000';
と、すると、

ERROR: cannot AND bit strings of different sizes
などと言われてしまう。

SELECT * FROM t WHERE B'00010000' = foo::bit & B'00010000'::bit;
などとしても同じ。

マニュアルのビット文字列関数と演算子を見てみたら、

単に”bit”にキャストすることは bit(1)にキャストすることを意味することに注意
してください。つまり、単に整数の最下位ビットのみが伝播されることになります。

なんて書いてある。

SELECT * FROM t WHERE B'00010000' = foo::bit(8) & B'00010000'::bit(8);
と、したら、意図するように動いてくれました。

しかし、CREATE TABLE する時に、ビット列データ型ってことも分かっていることだし、桁数だって分かってると思う。文字列で入力しても桁数揃えているんだから、ちゃんと解析して欲しいものです。

しかし、ビット列を主キーにしているテーブルでは、

SELECT * FROM t WHERE foo = foo & b'000100100000';
としても意図する通りに動きました。この差は謎のまま。

info ,

  1. コメントはまだありません。
  1. No trackbacks yet.