SQLSTATE 22P05Severity mediumLab verified

Incident brief

Untranslatable character between encodings

Converting text to a target encoding fails when a character has no representation there; the euro sign (U+20AC) has no LATIN1 equivalent.

Reproduced on PostgreSQL 18.4Verified 2026-07-24 (isolated lab, PostgreSQL 18.4)Reviewed by Verified against PostgreSQL 18.4 in an isolated lab environment

In 10 seconds

What
Untranslatable character between encodings
What triggers it
Call convert_to(text, encoding) where the text contains a character the target encoding cannot represent.
The fix
Convert to an encoding that can represent the characters (UTF8 or LATIN9 cover the euro sign).
Proof
Reproduced on PostgreSQL 18.4 → A single SELECT reproduces SQLSTATE 22P05; the euro sign cannot be encoded as LATIN1 and the conversion is refused.

The fix

What to do right now

The immediate, application-level response to this error.

  • Convert to an encoding that can represent the characters (UTF8 or LATIN9 cover the euro sign).
  • Strip or transliterate unsupported characters before converting to a narrow encoding like LATIN1.
Fix — SQL
-- Convert only characters the target encoding can represent.
SELECT convert_to('EUR', 'LATIN1');

Related & next steps

Follow the thread

Everything this error touches — jump straight to the sibling error, term, runbook, or parameter.

Verification

PG 18.4
Last verified
2026-07-24 (isolated lab, PostgreSQL 18.4)
Reviewed by
Verified against PostgreSQL 18.4 in an isolated lab environment
Audit status
reviewed