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)는 오른쪽을 0으로 채우고 초과분은 잘라낸다), 길이가 달라질 수 있다면 컬럼을 bit varying(n)으로 정의한다. 비트 연산 전에 피연산자를 같은 길이로 캐스트하고 length()로 길이를 확인한다.