问题现象
Oracle 租户 gbk 字符集,执行语句 like + 模糊查询繁体字报错 missing or illegal character following the escape character,如下图所示。

关键日志信息如下。
observer.log.20241021140406:[2024-10-21 14:03:35.529413] WARN [SQL.ENG] check_pattern_valid (ob_expr_like.cpp:220) [2813162][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=14] [dc=0] missing or illegal character following the escape character(escape_val=\, pattern_val=%?\\??%, ret=-5665)
observer.log.20241021140406:[2024-10-21 14:03:35.529434] WARN [SQL.ENG] like_varchar (ob_expr_like.cpp:808) [2813162][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=15] [dc=0] fail to check pattern string(pattern={len: 7, ptr: 0x7eb0bb56be46, hex: 25D55C5CBACF25}, escape={len: 1, ptr: 0x7e23ef98bb90, hex: 5C, cstr: \}, coll_type=87)
通过日志中的 Hex(十六进制) 转换,如下图所示。

问题原因
该问题属于 OceanBase 数据库缺陷,导致在查询的时候字符集的编码解析出现问题,中间出现了转义字符 \。
问题的风险及影响
导致执行语句报错 missing or illegal character following the escape character。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响
适用版本
OceanBase 数据库 V3.x 版本。
解决方法及规避方式
在 like 后使用 escape '\',如下所示。
SELECT * FROM lcinsured WHERE insuredname LIKE '%誠合%' escape '\';