【问题标题】:sql query with \ as value to check使用 \ 作为要检查的值的 sql 查询
【发布时间】:2012-11-30 15:48:50
【问题描述】:

我有以下方式的查询.....我有一个名为 location_ns 的列,它包含 'Marriott\256 Hotel & Convention Centre' 物超所值。但查询不会产生任何 id。 当我在值和查询中删除 \ 时,它正在工作。

SELECT id
FROM notice
WHERE 
lon = 78.48693966865540000000 
AND lat = 17.42434596639255000000 
AND location_ns = 'Marriott\256 Hotel & Convention Centre' 
AND notice_type="text"

如果有人有解决办法,请告诉我

【问题讨论】:

  • 尝试使用两个\而不是一个来转义它:Marriott\\256 Hotel & Convention Centre
  • 我怎么这么傻……我怎么忘记了???谢谢老兄。

标签: mysql sql special-characters


【解决方案1】:

String Literals 中所述:

在字符串中,某些序列具有特殊含义,除非启用了NO_BACKSLASH_ESCAPES SQL 模式。这些序列中的每一个都以反斜杠(“\”)开头,称为转义字符。 MySQL 识别Table 9.1, “Special Character Escape Sequences” 中显示的转义序列。对于所有其他转义序列,反斜杠将被忽略。也就是说,转义字符被解释为好像没有转义。例如,“\x”就是“x”。

因此,您必须转义反斜杠:

AND location_ns = 'Marriott\\256 Hotel & Convention Centre'

但是,您最好将文字作为参数传递给 MySQL,作为 prepared statement 的参数。

【讨论】:

    【解决方案2】:

    \ 是 MySQL 中的转义序列。如果你有一个有价值的记录:

    Marriott\256 Hotel & Convention Centre
    

    你需要像这样查询它

    AND location_ns = 'Marriott\\256 Hotel & Convention Centre'
    

    这让 MySQL 知道您正在寻找文字 \

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多