Blazer查询含单/双引号的字符串时对应的转义字符是什么
Blazer 单双引号查询转义方案(PostgreSQL 11 环境)
问题根因
Blazer 发送查询到数据库前会执行预处理逻辑,优先识别单引号作为字符串边界用于解析内置动态参数,原生 PostgreSQL 支持的语法会被该预处理逻辑拦截,因此你在数据库控制台、DBeaver 中正常运行的语句在 Blazer 中会报错。
官方转义规则
- 单引号转义:如果需要传递字面量单引号
'到 PostgreSQL,使用两个连续的单引号''替换单个单引号即可,Blazer 会将其识别为字面量而非字符串边界。 - 双引号转义:双引号如果作为字符串字面量的一部分使用,无需做 Blazer 层额外转义,只需确保外层字符串包裹符使用单引号并按上述规则转义即可。
零转义兼容方案
直接使用 PostgreSQL 原生美元符号引用语法包裹字符串内容,Blazer 不会解析该语法包裹的内容,会直接透传给数据库,无需处理内部的单双引号转义,你提供的示例修改后如下:
SELECT * FROM "search_filters" WHERE "params" LIKE $$%with_vehicles_id"=>[%$$ LIMIT 100
如果你的字符串内容本身包含 $ 符号,可以自定义美元引用标签避免冲突,示例如下:
SELECT * FROM "search_filters" WHERE "params" LIKE $custom_tag$%with_vehicles_id"=>[%$custom_tag$ LIMIT 100
注意事项
- 不要使用反斜杠
\转义单引号,Blazer 预处理逻辑不识别该转义方式,会直接触发语法错误。 - 双引号如果用于引用表名、列名等标识符,和原生 PostgreSQL 语法完全一致,无需修改。
内容的提问来源于stack exchange,提问作者wdenny3885
相关产品推荐
相关产品推荐

