22026: string_data_length_mismatch
PostgreSQL含义
位串的长度与操作所要求的固定长度不匹配。在 PostgreSQL 中最常见于将不同长度的位串写入定长 bit(n) 类型,或对不同长度的位串执行按位 AND/OR/XOR。
原因
向 bit(n) 列写入短于/长于 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() 检查长度。