DBAtlas · データベース運用アトラス

22026: string_data_length_mismatch

PostgreSQL

意味

ビット列の長さが、操作で要求される固定長と一致しない。PostgreSQL では、固定長の bit(n) 型に異なる長さのビット列を書き込んだ場合や、長さの異なるビット列にビット単位の AND/OR/XOR を適用した場合に最もよく発生する。

原因

bit(n) 列に n より短い/長いビット列を書き込んだ (例: bit(4) 列に B'101': 'bit string length 3 does not match type bit(4)')、または長さの異なるビット列に &、|、# を適用した ('cannot AND bit strings of different sizes')。テキストや文字エンコーディングが原因ではない。char(n)/varchar(n) に長すぎる値を入れた場合は代わりに 22001 となる。

対処方法

値を目的の長さにする: 明示的なキャストを使用する (B'101'::bit(4) は右側をゼロで埋め、超過分を切り捨てる)。長さが可変であれば列を bit varying(n) として定義する。ビット演算の前にオペランドを同じ長さにキャストし、length() で長さを確認する。

DBAtlas で開く →

同じデータベースの他の項目