【问题标题】:Handling database table entries with backslashes?使用反斜杠处理数据库表条目?
【发布时间】: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


【解决方案1】:

Blockquote 反斜杠 - 默认情况下 - 在 SQL 中没有特殊含义。这可能是由正在处理这些值(并将它们发送到数据库)的任何代码引起的。有关在线示例,请参见此处:rextester.com/QLLYG57275 – a_horse_with_no_name

我接受这个作为答案,因为我已经验证问题出在构建 SQL 的后端代码之外,而不是在数据库端如何处理 SQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多