【发布时间】:2016-11-08 13:59:07
【问题描述】:
我们遇到了一个奇怪的边缘情况,我们试图在数据库的表中存储一个 json blob,并且该 blob 需要能够包含 \ 字符。因此,用户要输入\test,它需要按原样返回,而是作为标签返回,后跟“est”
据我所知,发生的事情是,当用户输入并提交"\test" 时,它会被评估为“\ \test”(删除空格,不能在这里放两个反斜杠并让它显示正确吗?)由客户端然后输入到表中。我可以验证在针对表调用的 SQL 中有两个反斜杠。当我在这一步之后在表格中查看它时,它返回到"\test"。当客户端再次加载它时,它会被评估为一个标签,后跟一个“est”。
我们的印象是第二个反斜杠是必要的,这样第一个反斜杠就会被转义而不被评估,但也许这就是导致问题的原因?我有点假设当查询运行时,其中一个反斜杠无论如何都会被转义,但我不确定该怎么做。我们的数据库是否有一些东西正在处理我们需要注意的反斜杠?有没有我们没有考虑过的处理方法?
如果有帮助的话,它是一个 Postgres 数据库。我想说我是这类事情的初学者到中级,我正在查看文档,但如果有人能指出我正确的方向,那将非常有帮助。
据我通过 Amazon Aws 得知的 Postgres 版本是 9.3
编辑 我认为我在我们的 php 后端中将这个问题追踪到了我不太了解的一行。我现在正在查看相关文档,并将其标记为已回答,因为我已经验证这不是 SQL 的问题。
【问题讨论】:
-
反斜杠 - 默认情况下 - 在 SQL 中没有特殊含义。这可能是由正在处理这些值(并将它们发送到数据库)的任何代码引起的。在线示例请参见此处:rextester.com/QLLYG57275
-
了解确切的 SQL 语句以及 PostgreSQL 版本会很有趣。
-
我是否误解了这个 postgres 文档? postgresql.org/docs/9.0/static/sql-syntax-lexical.html 似乎在 4.1.2.2 中暗示使用 \ 字符接受类似 C 的转义
-
但仅适用于以
E'开头的“转义”(非标准)字符串,例如E'\t',而不是像'\t'这样的常规字符串 - 但这是您的应用程序代码会做的事情(请不要将手册用于过时和不受支持的版本)
标签: php sql postgresql backslash