# 22019 — invalid_escape_character

> PostgreSQL SQLSTATE 22019 的来源与诊断参考。
---

## 速览 {#at-a-glance}
某个操作拒绝了它的转义参数。固定目录定义了 `invalid_escape_character`，但有限的 PostgreSQL 18.6 源码扫描没有找到可以安全绑定单一报文或严重级别的原生发出路径。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `22019` |
| 条件名 | `invalid_escape_character` |
| 状态 | `有效` |
| 已知存在于 | `7.4` |
| 锁定快照 | `9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3` |
| 宏 | `ERRCODE_INVALID_ESCAPE_CHARACTER` |
| 别名 | `—` |

<!-- source facts: data/errcodes/22019.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}
具体规则属于 `ESCAPE` 的消费者。PostgreSQL 的 LIKE 和 SIMILAR 文档允许一个字符的转义符，也允许用 `ESCAPE ''` 禁用转义，并特别说明这与 SQL 标准对零长度值的规定不同。其他消费者可能要求一个字符、拒绝某些字符，或有自己的空串规则。因此在没有发出路径时，不能用一条通用的长度或字符校验解释 `22019`。

## 诊断 {#diagnosis}
先确认消费者并阅读完整诊断，再修改值。检查转义表达式的解析类型和字符长度、值是否为空字符串，以及所选字符在该模式语言中是否有特殊含义。把 SQL 字符串字面量的引号处理与模式转义分开，并将本有限定义与 `2200C` 的 SIMILAR 分隔符语法、`2200D` 的无效字节区分开。

## 处理 {#response}
遵循消费者文档规定的转义表示：消费者要求时提供有效的单字符，消费者明确用空字符串（ESCAPE ''）禁用转义时才使用这个支持的表示。必要时重新编码 SQL 字面量，然后在同一消费者中验证；不要把 LIKE 规则套到无关解析器上。

## 版本 {#versions}
锁定目录从 7.4 起记录该条件；固定源码覆盖 PostgreSQL 18.6。本次有限审阅没有确定精确的实现引入时间或原生发出路径。

## 相关 {#related}
[`2200C`](../2200c/)、[`2200D`](../2200d/)

## 来源 {#sources}
- 固定定义已在 `errcodes.txt` 中核对；本次有限 PostgreSQL 18.6 源码扫描没有解析出 `ERRCODE_INVALID_ESCAPE_CHARACTER` 的出现位置。
- 同版[模式匹配文档](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/doc/src/sgml/func.sgml#L5551-L5662)说明 LIKE 的单字符、默认和空转义规则，[`#L5724-L5830`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/doc/src/sgml/func.sgml#L5724-L5830)说明对应的 SIMILAR 规则。这是消费者规则，不是对 `22019` 发出函数的声明。

运行核验为 `not_run`；本页不宣称 primary 模板、严重级别或事务影响。结构化[证据记录](../../data/evidence/22019.json)保留定义、文档范围和有限发出路径限制。
