22026: string_data_length_mismatch
PostgreSQLЧто это значит?
Длина битовой строки не соответствует фиксированной длине, требуемой операцией. В PostgreSQL чаще всего появляется, когда битовая строка другой длины записывается в тип фиксированной длины bit(n) или когда побитовые AND/OR/XOR применяются к битовым строкам разной длины.
Почему возникает?
Запись битовой строки короче/длиннее n в столбец bit(n) (например, B'101' в столбец bit(4): '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().