22026: string_data_length_mismatch
PostgreSQLNe demek?
Bir bit dizisinin uzunluğu, işlemin gerektirdiği sabit uzunlukla uyuşmuyor. PostgreSQL'de en sık sabit uzunluklu bit(n) türüne farklı uzunlukta bir bit dizisi yazıldığında ya da farklı uzunluktaki bit dizileri arasında bit düzeyinde AND/OR/XOR yapıldığında ortaya çıkar.
Neden olur?
bit(n) sütununa n'den kısa/uzun bir bit dizisi yazılması (ör. bit(4) sütununa B'101': 'bit string length 3 does not match type bit(4)') ya da farklı uzunluktaki bit dizileriyle &, |, # işlemleri ('cannot AND bit strings of different sizes'). Metin veya karakter kodlaması kaynaklı değildir; char(n)/varchar(n) için fazla uzun değer 22001 verir.
Nasıl çözülür?
Değeri hedef uzunluğa getirin: açık dönüşüm kullanın (B'101'::bit(4) sağdan sıfırla doldurur, fazlasını kırpar) ya da uzunluk değişebiliyorsa sütunu bit varying(n) olarak tanımlayın. Bit düzeyinde işlemlerden önce işlenenleri aynı uzunluğa dönüştürün; uzunluğu length() ile kontrol edin.